中午吃饭的时候,朋友微信上发来一条消息,说它想把List转为json对象,说自己转的格式不对,找不到原因,让我帮忙看一下:
package com.example.demo.fastjson;
import com.alibaba.fastjson.JSON;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class ListToJson {
public static void main(String[] args) {
Map<String,String> map = new HashMap<>();
map.put("1","aaa");
map.put("2","bbb");
map.put("3","ccc");
map.put("4","ddd");
Map<String,String> map1 = new HashMap<>();
map1.put("1","aaa");
map1.put("2","bbb");
map1.put("3","ccc");
map1.put("4","ddd");
List<Map<String,String>> list = new ArrayList<>();
list.add(map);
list.add(map1);
System.out.println(JSON.toJSONString(list.toString()));
}
}
输出:
"[{1=aaa, 2=bbb, 3=ccc, 4=ddd}, {1=aaa, 2=bbb, 3=ccc, 4=ddd}]"
分析问题:
可以看一下他的数据结构构成:
List中是一个map对象,map存在key和value,分别是String对象,当他调用了JSON.toJSONString(list.toString());
执行了两个步骤:
(1)list
转为字符串
(2)String
类型的字符串转为JSON字符串,其实json就是字符串额。
问题就发生在第一步,list转字符串的时候,由于里面是个map,会将key和value用等号连接。这个就是他出现上面输出的结果。
如何改进?
将list.toString()
改为list
就可以了
package com.example.demo.fastjson;
import com.alibaba.fastjson.JSON;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class ListToJson {
public static void main(String[] args) {
Map<String,String> map = new HashMap<>();
map.put("1","aaa");
map.put("2","bbb");
map.put("3","ccc");
map.put("4","ddd");
Map<String,String> map1 = new HashMap<>();
map1.put("1","aaa");
map1.put("2","bbb");
map1.put("3","ccc");
map1.put("4","ddd");
List<Map<String,String>> list = new ArrayList<>();
list.add(map);
list.add(map1);
System.out.println(JSON.toJSONString(list));
}
}
输出:
[{"1":"aaa","2":"bbb","3":"ccc","4":"ddd"},{"1":"aaa","2":"bbb","3":"ccc","4":"ddd"}]