java中string與json互相轉化


在Java中socket數據傳輸時,數據類型往往比較難選擇。可能要考慮帶寬、跨語言、版本號的兼容等問題。

比較常見的做法有兩種:一是把對象包裝成JSON字符串傳輸,二是採用java對象的序列化和反序列化。

隨着Google工具protoBuf的開源。protobuf也是個不錯的選擇。對JSON,Object Serialize,ProtoBuf 做個對照。

1、string轉json

有三種方法

第一種:string直接轉json

String json = "{\"2\":\"efg\",\"1\":\"abc\"}";   JSONObject json_test = JSONObject.fromObject(json);   將string的雙引號轉義就可以。適用於字符串較短的

另外一種:將string轉為list后轉為json

List<String> list = new ArrayList<String>();  list.add("username");  list.add("age");  list.add("sex");  JSONArray array = new JSONArray();  array.add(list);     

                能夠使用list的add函數將須要的字符串拼接就可以,可是這個僅僅能使用jsonarry

第三種:將string轉為map后轉為json

 Map<String, String> map = new HashMap<String, String>();
        map.put("1", "abc");
map.put("2", "efg");
JSONArray array_test = new JSONArray();
array_test.add(map);
    JSONObject jsonObject = JSONObject.fromObject(map);

               這里使用map就能夠將字符串轉化為JSONArray或者JSONObject都能夠。可是這里的鍵不能使用int型

1、json轉string

先構造json:JSONObject string_to_json = JSONObject.fromObject("{\"data\": {\"pages\": [ {\"comment\": \"just for test\"},{\"comment\": \"just for test\"}],\"total_count\": 2 },\"errcode\": 0}");

對於JSONObject而言就能夠直接使用


    JSONObject json_to_data = string_to_json.getJSONObject("data");就可以

對於JSONArray而言就能夠使用這兩種

第一種:JSONArray json_to_strings = json_to_data.getJSONArray("pages");//先將JSONObject里包括的JSONArray取出
    for (Object object : json_to_strings) {//循環讀取就可以
     JSONObject json_to_string = JSONObject.fromObject(object);
      json_to_string.get("pages");
   

另外一種:JSONArray json_to_strings_test = json_to_data1.getJSONArray("pages");//先將JSONObject里包括的JSONArray取出
    for (int i = 0; i < json_to_strings_test.size(); i++) {//循環讀取就可以
      JSONObject json_to_string1 = json_to_strings_test.getJSONObject(i);
   

上面所有程序的測試如圖:


以下貼出代碼:

//string構築json
String json = "{\"2\":\"efg\",\"1\":\"abc\"}";
JSONObject json_test = JSONObject.fromObject(json);  
    System.out.print("json_test:"+json_test);
    System.out.print("\n");
//使用list構築json(list僅僅能使用JSONArray)
List<String> list = new ArrayList<String>();
        list.add("username");
        list.add("age");
        list.add("sex");
        JSONArray array = new JSONArray();
        array.add(list);
        System.out.print("array:"+array);
    System.out.print("\n");
        //初始化HashMap集合並加入數組(json必須鍵不能是int類型)
        Map<String, String> map = new HashMap<String, String>();
        map.put("1", "abc");
map.put("2", "efg");
JSONArray array_test = new JSONArray();
array_test.add(map);
        System.out.print("array_test:"+array_test);
    System.out.print("\n");
    JSONObject jsonObject = JSONObject.fromObject(map);  
    System.out.print("jsonObject:"+jsonObject);
    System.out.print("\n");
    //解析json
    JSONObject string_to_json = JSONObject.fromObject("{\"data\": {\"pages\": [ {\"comment\": \"just for test1\"},{\"comment\": \"just for test2\"}],\"total_count\": 2 },\"errcode\": 0}");
    JSONObject json_to_data = string_to_json.getJSONObject("data");
    JSONArray json_to_strings = json_to_data.getJSONArray("pages");
    for (Object object : json_to_strings) {
     JSONObject json_to_string = JSONObject.fromObject(object);
     json_to_string.get("pages");
     System.out.print("json_to_string.get(\"pages\"):"+json_to_string.get("comment"));
     System.out.print("\n");
   
    JSONObject json_to_data1 = string_to_json.getJSONObject("data");
    JSONArray json_to_strings_test = json_to_data1.getJSONArray("pages");
    for (int i = 0; i < json_to_strings_test.size(); i++) {
      JSONObject json_to_string1 = json_to_strings_test.getJSONObject(i);
      System.out.print("json_to_string1.get(\"pages\"):"+json_to_string1.get("comment"));
      System.out.print("\n");
   

有新的好的方法希望可以討論


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM