如何在Java中自定义订购JSON字符串

huangapple 未分类评论50阅读模式
英文:

How to custom order JSON string in Java

问题

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

public class JsonOrderingExample {

    public static void main(String[] args) {
        String json = "{\n" +
                "   \"SignedSubscriptionRule\":{\n" +
                "      \"User rights\":\"something1\",\n" +
                "      \"Function\":\"something2\",\n" +
                "      \"Method name\":\"something3\"\n" +
                "   },\n" +
                "   \"CancelZeroSubscriptionRule\":{\n" +
                "      \"User rights\":\"something4\",\n" +
                "      \"Function\":\"something5\",\n" +
                "      \"Method name\":\"something6\"\n" +
                "   },\n" +
                "   \"NewLoanAllocationRule\":{\n" +
                "      \"User rights\":\"something7\",\n" +
                "      \"Function\":\"something8\",\n" +
                "      \"Method name\":\"something9\"\n" +
                "   }\n" +
                "}";

        String[] customOrder = {"SignedSubscriptionRule", "NewLoanAllocationRule", "CancelZeroSubscriptionRule"};

        ObjectMapper objectMapper = new ObjectMapper();
        try {
            JsonNode root = objectMapper.readTree(json);

            String orderedJson = orderJson(root, customOrder);

            System.out.println(orderedJson);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static String orderJson(JsonNode root, String[] customOrder) {
        ObjectMapper objectMapper = new ObjectMapper();
        ObjectNode orderedNode = objectMapper.createObjectNode();

        for (String key : customOrder) {
            if (root.has(key)) {
                orderedNode.set(key, root.get(key));
            }
        }

        return orderedNode.toString();
    }
}

Note: This code example uses the Jackson library to manipulate JSON objects in Java. The orderJson function takes the original JSON node and the custom order as input and returns a new JSON node with the desired order. The Jackson library's ObjectNode class is used to create and manipulate JSON objects.

英文:

I have a JSON string that looks something like this:

{
   "SignedSubscriptionRule":{
      "User rights":"something1",
      "Function":"something2",
      "Method name":"something3"
   },
   "CancelZeroSubscriptionRule":{
      "User rights":"something4",
      "Function":"something5",
      "Method name":"something6"
   },
   "NewLoanAllocationRule":{
      "User rights":"something7",
      "Function":"something8",
      "Method name":"something9"
   }
}

Let's say I receive this JSON on daily basis and each time I have to reorder it to meet my needs.
How could I defined a custom order of this JSON. Let's say I want it to have the following order:
SignedSubscriptionRule, NewLoanAllocationRule, CancelZeroSubscriptionRule

I'm coding in Java.
I would like to avoid writing my own iterating solution.

答案1

得分: 0

只需注意,在JSON中的顺序除了一些罕见的情况外并没有意义。

例如:

{ "foo": "test", "bar": "test2" }



{ "bar": "test2", "foo": "test" }

是相同的。

顺便说一下,如果您需要对其进行排序,您需要编写一个比较器来设置排序规则,就像这样:

```java
Collections.sort(list, new Comparator() {
   private static final String KEY_NAME = "Name";
   @Override
   public int compare(JSONObject a, JSONObject b) {
      String str1 = new String();
      String str2 = new String();
      try {
         str1 = (String)a.get(KEY_NAME);
         str2 = (String)b.get(KEY_NAME);
      } catch(JSONException e) {
         e.printStackTrace();
      }
      return str1.compareTo(str2);
   }
});

更多信息请参见:

https://www.tutorialspoint.com/how-can-we-sort-a-jsonarray-in-java

英文:

Just notice that ordering in JSON has no meaning except rare cases.

for example:

{ "foo": "test", "bar": "test2" }

and

{ "bar": "test2", "foo": "test" }

are the same.

by the way if you need to sort it, you need to write a comparator to set your rules for sorting, like this:

  Collections.sort(list, new Comparator() {
     private static final String KEY_NAME = "Name";
     @Override
     public int compare(JSONObject a, JSONObject b) {
        String str1 = new String();
        String str2 = new String();
        try {
           str1 = (String)a.get(KEY_NAME);
           str2 = (String)b.get(KEY_NAME);
        } catch(JSONException e) {
           e.printStackTrace();
        }
        return str1.compareTo(str2);
     }
  });

more info on:

https://www.tutorialspoint.com/how-can-we-sort-a-jsonarray-in-java

huangapple
  • 本文由 发表于 2020年5月19日 18:03:31
  • 转载请务必保留本文链接:https://java.coder-hub.com/61888320.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定