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);

    


package Test5;


import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


import net.sf.json.JSONArray;
import net.sf.json.JSONObject;


public class test2 {
public static void main(String[] args) {
//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");
   } 
}
}

测试结果:

json_test:{"2":"efg","1":"abc"}
array:[["username","age","sex"]]
array_test:[{"1":"abc","2":"efg"}]
jsonObject:{"1":"abc","2":"efg"}
json_to_string.get("pages"):just for test1
json_to_string.get("pages"):just for test2
json_to_string1.get("pages"):just for test1
json_to_string1.get("pages"):just for test2


Java,将String类型的JSON数据换为Map数组通常需要借助JSON处理库,如常用的`org.json`库或者`com.alibaba.fastjson`等。以下是使用`org.json`库实现换的一个示例: ```java import org.json.JSONArray; import org.json.JSONObject; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class JsonToMapArrayConverter { public static List<Map<String, Object>> convertJsonToMapArray(String jsonStr) throws Exception { JSONArray jsonArray = new JSONArray(jsonStr); // 将JSON格式的字符串换成JSONArray对象 List<Map<String, Object>> mapList = new ArrayList<>(); for (int i = 0; i < jsonArray.length(); i++) { JSONObject jsonObject = jsonArray.getJSONObject(i); // 遍历JSONArray,每个元素换为JSONObject Map<String, Object> map = new HashMap<>(); // 遍历JSONObject的keySet,将键值对添加到Map jsonObject.keys().forEachRemaining(key -> map.put(key, jsonObject.get(key))); mapList.add(map); } return mapList; } public static void main(String[] args) { String jsonStr = "[{\"name\":\"Alice\",\"age\":25},{\"name\":\"Bob\",\"age\":30}]"; try { List<Map<String, Object>> mapArray = convertJsonToMapArray(jsonStr); // 处理换后的mapArray } catch (Exception e) { e.printStackTrace(); } } } ``` 在上述代码,首先导入了必要的`org.json`库的类,然后通过`JSONArray`解析了输入的JSON格式字符串。之后,遍历`JSONArray`的每一个`JSONObject`,并将其换为`Map<String, Object>`类型,最后将所有的Map对象存入到一个List并返回。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值