java中string与json互相转化

你的名字 2021-05-03 03:36 641阅读 0赞

在Java中socket传输数据时,数据类型往往比较难选择。可能要考虑带宽、跨语言、版本的兼容等问题。比较常见的做法有两种:一是把对象包装成JSON字符串传输,二是采用java对象的序列化和反序列化。随着Google工具protoBuf的开源,protobuf也是个不错的选择。对JSON,Object Serialize,ProtoBuf 做个对比。

1、string转json

有三种方法

第一种:string直接转json

  1. String json = "{"2":"efg","1":"abc"}"; JSONObject json_test = JSONObject.fromObject(json); string的双引号转义即可,适用于字符串较短的

第二种:将string转为list后转为json

  1. 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

  1. Map<String, String> map = new HashMap<String, String>();
  2. map.put("1", "abc");
  3. map.put("2", "efg");
  4. JSONArray array_test = new JSONArray();
  5. array_test.add(map);
  6. 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而言就可以直接使用

  1. JSONObject json_to_data = string_to_json.getJSONObject("data");即可

对于JSONArray而言就可以使用这两种

第一种:

  1. JSONArray json_to_strings = json_to_data.getJSONArray("pages");
  2. //先将JSONObject里包含的JSONArray取出
  3. for (Object object : json_to_strings) {//循环读取即可
  4. JSONObject json_to_string = JSONObject.fromObject(object);
  5. json_to_string.get("pages");
  6. }

第二种:

  1. JSONArray json_to_strings_test = json_to_data1.getJSONArray("pages");
  2. //先将JSONObject里包含的JSONArray取出
  3. for (int i = 0; i < json_to_strings_test.size(); i++) {//循环读取即可
  4. JSONObject json_to_string1 = json_to_strings_test.getJSONObject(i);
  5. }

上面全部程序的测试如图:

Center

下面贴出代码:

  1. //string构筑json
  2. String json = "{"2":"efg","1":"abc"}";
  3. JSONObject json_test = JSONObject.fromObject(json);
  4. System.out.print("json_test:"+json_test);
  5. System.out.print("\n");
  6. //使用list构筑json(list只能使用JSONArray)
  7. List<String> list = new ArrayList<String>();
  8. list.add("username");
  9. list.add("age");
  10. list.add("sex");
  11. JSONArray array = new JSONArray();
  12. array.add(list);
  13. System.out.print("array:"+array);
  14. System.out.print("\n");
  15. //初始化HashMap集合并添加数组(json必须键不能是int类型)
  16. Map<String, String> map = new HashMap<String, String>();
  17. map.put("1", "abc");
  18. map.put("2", "efg");
  19. JSONArray array_test = new JSONArray();
  20. array_test.add(map);
  21. System.out.print("array_test:"+array_test);
  22. System.out.print("\n");
  23. JSONObject jsonObject = JSONObject.fromObject(map);
  24. System.out.print("jsonObject:"+jsonObject);
  25. System.out.print("\n");
  26. //解析json
  27. JSONObject string_to_json = JSONObject.fromObject("{"data": {"pages": [ {"comment": "just for test1"},{"comment": "just for test2"}],"total_count": 2 },"errcode": 0}");
  28. JSONObject json_to_data = string_to_json.getJSONObject("data");
  29. JSONArray json_to_strings = json_to_data.getJSONArray("pages");
  30. for (Object object : json_to_strings) {
  31. JSONObject json_to_string = JSONObject.fromObject(object);
  32. json_to_string.get("pages");
  33. System.out.print("json_to_string.get("pages"):"+json_to_string.get("comment"));
  34. System.out.print("\n");
  35. }
  36. JSONObject json_to_data1 = string_to_json.getJSONObject("data");
  37. JSONArray json_to_strings_test = json_to_data1.getJSONArray("pages");
  38. for (int i = 0; i < json_to_strings_test.size(); i++) {
  39. JSONObject json_to_string1 = json_to_strings_test.getJSONObject(i);
  40. System.out.print("json_to_string1.get("pages"):"+json_to_string1.get("comment"));
  41. System.out.print("\n");
  42. }

有新的好的方法希望能够讨论

发表评论

表情:
评论列表 (有 0 条评论,641人围观)

还没有评论,来说两句吧...

相关阅读

    相关 javastringjson互相转化

    在Java中socket传输数据时,数据类型往往比较难选择。可能要考虑带宽、跨语言、版本的兼容等问题。比较常见的做法有两种:一是把对象包装成JSON字符串传输,二是采用j...