【问题标题】:Json Object Item OrderJson 对象项目顺序
【发布时间】:2014-06-19 04:33:15
【问题描述】:

我已经写了一些代码;

JSONArray ja = new JSONArray();
     try {
        ResultSetMetaData metaData = rslt.getMetaData();
        while ( rslt.next() ){
            JSONObject jo = new JSONObject();
            LinkedHashMap<String, String> jsonOrderedMap = new LinkedHashMap<String, String>();

            for(int i = 0 ; i < metaData.getColumnCount(); i++){
                jsonOrderedMap.put(metaData.getColumnName(i+1), rslt.getString(i+1) );
            }
            System.out.println(jsonOrderedMap);
            /* This doesn't work */
            ja.put(jsonOrderedMap);
            //System.out.println(ja);

        }
     } catch (Exception e) {
    }

我正在订购我的 json 对象(我知道它不应该订购,但我需要它)它一直有效,直到我尝试将我的 jsonOrderedMap 放入 json 数组。在 JsonArray 之前,json 对象如下所示:

{CUSTOMER_SECTOR_ID=611, CUSTOMER_NO=0013114193, CUSTOMER_NAME=asdfasdfds}

把一些 jsonOrderedMap 放到 jsonArray 之后,是这样的;

[{"CUSTOMER_NAME":"qweqwe","CUSTOMER_NO":"0000003124","CUSTOMER_SECTOR_ID":"611"},
 {"CUSTOMER_NAME":"MAD.","CUSTOMER_NO":"0000003133","CUSTOMER_SECTOR_ID":"611"}]

如您所见,它的顺序不同。你有什么想法来解决它吗?我正在使用 gson 库。

【问题讨论】:

  • 由于 JSON 对象本身没有顺序,因此您应该在 JSON 对象中使用数组来确保顺序。 link
  • 感谢您的建议@SergioMartinez,但如果我确切知道类型,我可以使用您提供的链接。如果我不知道呢?我只需要输入字符串,因为您看到没有字段名称。我仍在尝试做,但没有任何效果。

标签: java json jsp


【解决方案1】:

JSON 对象中的字段没有任何顺序,因为它们应该通过它们的名称(键)来访问。

如果您需要保持订单,则必须使用 JSON 数组。

我不明白您为什么需要对命名字段进行排序,但如果您确实需要这样做,您可以使用包含 JSON 对象字段的数组。

This post 描述了如何做到这一点(感谢@SergioMartinez 提供的链接,它为我节省了很多时间!)。

【讨论】:

  • 是的,我在 javascript 部分中所做的与@SergioMartinez 完全相同,但在 java 中我不知道它会先出现在哪里。例如,您尝试创建一个数据表,并且在第一个字段中我使用的是复选框,并且必须有 id。但我不能确定没有订购。
  • 你能贴出你用来读取 JSON 的代码吗?您不应该使用第一个字段,而是使用“CUSTOMER_SECTOR_ID”字段。这就是 JSON 字段名称的意义所在,它们就像地图中的键。如果您需要在表格中显示数据,那么您必须知道数据是什么样的,包括字段的名称。
  • 但是 Customer_sector_id 字段总是在变化我从另一个地方带来的。我将加入字段放到第一个对象 ob json 中,这样我就可以得到相同的顺序。我将这个 json 与用户交互一起带来。
【解决方案2】:

Jackson JSON Processor 保存订单。 简单使用示例:

   static ObjectMapper o = new ObjectMapper();
   public static void main(String[] args) throws IOException 
   {
      List<Map> array = new ArrayList<Map>();
      Map<String, String> obj1 = new LinkedHashMap<String, String>();
      obj1.put("CUSTOMER_SECTOR_ID", "Id");
      obj1.put("CUSTOMER_NO", "No");
      obj1.put("CUSTOMER_NAME", "Name");
      array.add(obj1);
      System.out.println(o.writeValueAsString(array));
   }

Maven 依赖

  <dependency>
     <groupId>org.codehaus.jackson</groupId>
     <artifactId>jackson-mapper-asl</artifactId>
     <version>1.8.5</version>
  </dependency>

【讨论】:

    猜你喜欢
    • 2017-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多