Json对象项目顺序

时间:2014-05-02 13:12:08

标签: java json jsp

我写了一些代码;

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库。

2 个答案:

答案 0 :(得分:2)

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

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

我不明白为什么你需要命名命名字段,但是如果你真的需要这样做,你可以使用包含JSON对象字段的数组。

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

答案 1 :(得分:0)

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>