String jsonStr = "{\"kind\":\"Deployment\",\"metadata.name\":\"nginx-deployment\",\"spec.replicas\":\"3\",\"spec.template.spec.containers\":[{\"name\":\"nginx\",\"image\":\"nginx:1.7.9\",\"ports\":[{\"containerPort\":\"80\"}]},{\"name\":\"nginx\",\"image\":\"nginx:1.7.9\",\"ports\":[{\"containerPort\":\"80\"}]}]}\n";
Map<String, Object> dummyMap = JSON.parseObject(jsonStr,LinkedHashMap.class, Feature.OrderedField);//关键的地方,转化为有序map
将json转换成LinkedHashmap,全部有序String jsonStr = &quot;{\&quot;kind\&quot;:\&quot;Deployment\&quot;,\&quot;metadata.name\&quot;:\&quot;nginx-deployment\&quot;,\&quot;spec.replicas\&quot;:\&quot;3\&quot;,\&
LinkedHashMap requestData = new LinkedHashMap();
LinkedHashMap auth =新的LinkedHashMap();
auth.put(“ ServiceName”,“ Login”);
auth.put(“ Username”,“ user”);
auth.put(“ Password”,“ 123”);
requestData.put(“ Authentication”,auth);
JSONObject json = LinkedHashMapHelper.toJSONObject(requestData);
LinkedHashMapHelper响应= LinkedHashMapHelper.fromJSO
在做项目的时候,无意间发现添加到json中的元素是无存放顺序的。严格来说,json默认是有存放顺序的,不过是采用HashCode值来排序。下面来看一段源码
上图展示了创建json对象的一个过程,可以清晰的看出,无论用户调用哪个构造方法,最终都是去执行图片上最后这个构造方法,根据用户传入的第二个参数来决定创建LinkedHashMap对象还是HashMap对象,这就说明了,json底层是一个Map集合,也就解释了为什么json默认存放元素是无序的(其实是有序的,不过按照HashCode排序,跟put顺序无关)。
如有写的不对的地方,敬请指正,感谢!
作者:xioayu96
前提:后端同志在response中返回多种类型,
失败时返回String,成功时返回数据实体用于前端显示。都是用Data字段接收:
public class RootBean<T> {
private int StatusCode;
private T Data;
一、寻找原因
一开始想的很好办嘛,成功时将存有json数据的data转换成实体类就好啦:
new Gson().formJson(jsonString,实体类.class)
不料接收的data是
引入类import com.alibaba.fastjson.JSON;
1.Json 字符串转换为Map
Map<String,Object> biMap= JSON.parseObject(url_param);
2.Json 转换为List 或者List<~> 泛型
List<Map> listi = JSON.parseArray(biMap.get("components").toString(),Map.class);
3.Map 转换为Json字符串
无意中遇到 给json串重新赋值时,将json转换为jsonobject时返回结果顺序乱了
话不多说直接上代码
public String updateJosnStr(String jsonStr) throws JSONException {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm...
背景:做项目涉及两个微服务之间传数据时,需要提供方将Map类型的数据序列化为com.alibaba.fastjson.JSONObject,再转化为JSONString,传给接收方,接收方将String转换为com.alibaba.fastjson.JSONObject,再反序列化为Map,且接收方需要保持存取顺序一致。
问题:不能将String转为JSONObject,再强转为LinkedMap,这样编译会报错;也不能将String转为JSONArray,再一个一个赋值,组建成LinkedHas..
public class Test {
public static void main(String[] args) {
String jsonStr = "[{\"name\":\"张三\",\"age\":18},{\"name\":\"李四\",\"age\":20}]";
JSONArray jsonArray = JSON.parseArray(jsonStr);
System.out.println(jsonArray);
输出结果为:
[{"name":"张三","age":18},{"name":"李四","age":20}]
其中,jsonStr是一个json字符串,包含了两个对象。使用JSON.parseArray方法将json字符串转为JSONArray对象,再通过JSONArray对象获取list。