首页 > 其他分享 >json字符串转map 字段顺序错乱问题

json字符串转map 字段顺序错乱问题

时间:2022-11-06 16:02:09浏览次数:79  
标签:map parseObject put json 123 错乱 LinkedHashMap 233

参考声明1:https://blog.csdn.net/maxi1234/article/details/124847267

说一下我使用的场景:就是有一个需求是写一个接口,里面要求返回的数据字段顺序是有要求的,返回数据我是用hashmap封装的然后返回的,但是字段顺序却不是按照我put的时候来的.所以在新建map的时候我们将hashmap换成linkedHashMap.再加上下面的 Map paraMap = JSON.parseObject(content, LinkedHashMap.class, Feature.OrderedField);就可以了.

引入jar包

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.73</version>
</dependency>

默认可以使用JSON.parseObject将字符串转成Map,但是如果json中有多个key-value,则转换后的顺序可能颠倒。如下

public static void main(String[] args) {
        String content = "{\"text1\":\"123\",\"text2\":\"456\",\"text3\":\"789\"}";
        Map paraMap = JSON.parseObject(content);
 
        System.out.println(paraMap.toString());
}

运行结果:

{"text3":"789","text1":"123","text2":"456"}

使用JSON.parseObject(content, LinkedHashMap.class, Feature.OrderedField)可以解决这个问题

public static void main(String[] args) {
        String content = "{\"text1\":\"123\",\"text2\":\"456\",\"text3\":\"789\"}";
        Map paraMap = JSON.parseObject(content, LinkedHashMap.class, Feature.OrderedField);
 
        System.out.println(paraMap.toString());
}

运行结果:

{text1=123, text2=456, text3=789}

参考声明2:https://www.cnblogs.com/wlstudy09/p/16454202.html

用到是阿里巴巴的fastjson,读取只需要加上 Feature.OrderedField 参数

JSONObject.parseObject(param,Feature.OrderedField)

写出则需要将实体类加上注解(注解这个我没有试过,看到了就记录一下)

@AllArgsConstructor
@NoArgsConstructor
@Data
class People {
    @JSONField(ordinal = 1)
    private Integer id;
    @JSONField(ordinal = 2)
    private String name;
    @JSONField(ordinal = 3)
    private Map<String,Object> map;
}

但是不会保证嵌套的map是有序的,但是我们可以使用LinkedHashMap进行存储数据,LinkedHashMap是双端队列,存储的是有序的。

测试代码如下

public class JsonTest {
    public static void main(String[] args) {
        People people = new People();
        Map<String, Object> map = new LinkedHashMap<>();
        map.put("aa",123);
        map.put("ww",123);
        map.put("bb",233);
        map.put("cc",233);
        map.put("dd",233);
        map.put("ee",233);
        map.put("ff",233);
        map.put("rr",233);
        map.put("566",233);
        map.put("88",233);
        map.put("99",233);
        map.put("55",233);
        map.put("00",233);

        people.setId(1002);
        people.setName("222");
        people.setMap(map);

        System.out.println(JSON.toJSONString(people));

    }
}

运行结果

{
    "id":1002,
    "name":"222",
    "map":{
        "aa":123,
        "ww":123,
        "bb":233,
        "cc":233,
        "dd":233,
        "ee":233,
        "ff":233,
        "rr":233,
        "566":233,
        "88":233,
        "99":233,
        "55":233,
        "00":233
    }
}

使用Gson直接可以顺序读取和顺序输出,不过没有fastjosn快。

标签:map,parseObject,put,json,123,错乱,LinkedHashMap,233
From: https://www.cnblogs.com/javaxubo/p/16862807.html

相关文章

  • Jmeter断言之Json Assertion
    现在大部分的程序都是通过json格式返回数据,所以JsonAssertion也是非常重要的一个组件添加JsonAssertion组件使用方法 ......
  • Map接口常用方法
    packagecom.msb.test10;importjava.util.Collection;importjava.util.HashMap;importjava.util.Map;importjava.util.Set;/***@author:liu*日期:08:4......
  • @RequestMapping注解(超详细基础知识+实际代码案例)
    1、@RequestMapping注解的功能从注解名称上我们可以看到,@RequestMapping注解的作用就是将请求和处理请求的控制器方法关联起来,建立映射关系。SpringMVC接收到指定的请求,......
  • SQL Server – Work with JSON
    前言JSON是一个很好的格式,array,object就能表达一个表格了.如果想保存一些结构格式,又不想用表格这么大费周章的话,JSON会是很好选择.比如我用它来记入AuditT......
  • EF Core – JSON Column
    前言SQLServer支持JSON,以前写过一篇介绍 SQLServer–WorkwithJSON.但EFCore一直没有支持.直到EFCore7.0才支持. 参考Docs–JSONColumns 配......
  • EFCore使用JSON_VALUE查询json对象的值
    IntroSqlServer从2016开始支持JSON操作,可以使用JSON_VALUE查询JSON对象的某个属性值,更多介绍,现在公司的一些项目主要是使用EFCore,手写sql较少,针对比较简单的......
  • Java Map
    需求:使用staticmap存常量publicstaticMap<String,String>articleMapOne;static{articleMapOne=newHashMap<>();articleMapOne.put("ar01","Introto......
  • JS中JSON.parse()方法解析失败的问题
    今天在安卓开发(安卓内嵌cordova,页面采用js+html编写)的过程中,出现了一个问题:      result=JSON.parse(result); 该方法抛出异常:JSON解析失败。在对......
  • 不要小瞧了Map接口,实现一个Map对象并不简单!
    不要小瞧了Map接口,实现一个Map对象并不简单!这篇文章我们不谈别的,就讲讲Map接口,以及Map集合的一个重要的概念,Map的元素的散列。实现Map接口如果我们想自己定义一个Map需要......
  • Java的HashSet和HashMap性能选项
    Java的HashSet和HashMap性能选项1.*HashSet和HashMap的性能选项对于HashSet及其子类而言,它们采用hash算法来决定集合中元素的存储位置,并通过hash算法来控制集合的大小;对......