【问题标题】:How to reposition or reorder the keys in JSON object or hash map in java如何在 Java 中重新定位或重新排序 JSON 对象或哈希映射中的键
【发布时间】:2022-01-25 04:34:31
【问题描述】:

{
data:{},
firstNane:"",
id:"1,
lastName:"",
  children:[
    parent:"1",
    id:"11",
    name:"",
    firstName:"",
    lastName:"",
    chidlren:[..other nested children],
    data:{},
  ],
name:"",
}

上面是我的 JSON 对象,我想将键重新定位为以下格式 id、姓名、名字、姓氏、数据和孩子

有人可以告诉我如何重新定位上述键,以便我的最终输出显示如下::-

这是 JSON 对象,也让我知道哈希映射如何对元素进行排序。

{
    id:"1,
    name:"",
    firstNane:"",
    lastName:"",
    data:{},
      children:[
        id:"11",
        name:"",
        firstName:"",
        lastName:"",
        parent:"1",
        data:{},
        chidlren:[..other nested children],
      ],

}

【问题讨论】:

  • JSON 对象是一个数组。您只需要按您想要的顺序插入它们。没有简单的方法可以重新排序 JSON 对象中的元素。这是因为 JSON 字符串的结构不像(例如)XML 那样严格。 XML 强制执行这些排序。我知道 JSON 是新事物,但如果这很重要 1) 使用 XML 之类的东西,以便无论插入顺序如何都可以以特定方式排列,或者 2) 编写自己的 JSON 编写器。
  • 您没有提供足够的详细信息。至少回答这些问题:您如何生成 JSON(包括代码)?您使用什么工具来生成 JSON(gson、jackson 等)?你如何在你的 java 代码中表示数据(包括一个或多个类;也许只是孩子的东西类)?

标签: java json hashmap


【解决方案1】:

JSON definition:

JSON 建立在两种结构之上:
名称/值对的集合。在各种语言中,这被实现为对象、记录、结构、字典、哈希表、键控列表或关联数组。
值的有序列表。在大多数语言中,这被实现为 数组、向量、列表或序列。

对象是一组无序名称/值对。

同样,HashMap 也没有排序:这个类不保证地图的顺序;特别是,它不保证订单会随着时间的推移保持不变。

接下来,呈现的 JSON 无效,需要更新。

但是,某些 JSON 库提供了对字段进行排序的工具,例如 Jackson 库中的 @JsonPropertyOrder 注释。

@JsonInclude(Include.NON_NULL)
@JsonPropertyOrder({ "id", "name", "firstName", "lastName", "parent", "data", "children" })
@Data
public class MyPojo {
    private Integer id;
    private String name;
    private String firstName;
    private String lastName;
    private Map<String, Object> data;
    private List<MyPojo> children;
    private Integer parent;
}

测试:

ObjectMapper mapper = new ObjectMapper();
MyPojo c1 = new MyPojo(11, "", "", "", new HashMap<>(), new ArrayList<>(), 1);
MyPojo mp = new MyPojo(1, "", "", "", new HashMap<>(), Arrays.asList(c1), null);

System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(mp));

输出:

{
  "id" : 1,
  "name" : "",
  "firstName" : "",
  "lastName" : "",
  "data" : { },
  "children" : [ {
    "id" : 11,
    "name" : "",
    "firstName" : "",
    "lastName" : "",
    "parent" : 1,
    "data" : { },
    "children" : [ ]
  } ]
}

【讨论】:

    【解决方案2】:

    您可以使用LinkedHashMap 对元素进行排序。

    LinkedHashMap 以与添加元素相同的方式返回元素,这与 HashMap 不同。

    【讨论】:

      猜你喜欢
      • 2021-10-16
      • 1970-01-01
      • 2021-08-12
      • 2019-04-15
      • 2014-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-29
      相关资源
      最近更新 更多