Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Json对象项顺序_Java_Json_Jsp - Fatal编程技术网

Java Json对象项顺序

Java Json对象项顺序,java,json,jsp,Java,Json,Jsp,我写了一些代码 JSONArray ja = new JSONArray(); try { ResultSetMetaData metaData = rslt.getMetaData(); while ( rslt.next() ){ JSONObject jo = new JSONObject(); LinkedHashMap<String, String> jsonOrderedMap =

我写了一些代码

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) {
    }
在将一些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数组

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

描述如何执行此操作(感谢@Sergiomatinez的链接,它节省了我很多时间!)。

保存订单。 简单的用法示例:

   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));
   }
static ObjectMapper o=new ObjectMapper();
公共静态void main(字符串[]args)引发IOException
{
列表数组=新的ArrayList();
Map obj1=新建LinkedHashMap();
obj1.put(“客户部门ID”、“ID”);
obj1.put(“客户号”、“否”);
obj1.put(“客户名称”、“名称”);
array.add(obj1);
System.out.println(o.writeValueAsString(数组));
}
Maven依赖

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

org.codehaus.jackson
杰克逊地图绘制者
1.8.5

由于JSON对象本身没有顺序,因此您应该在JSON对象中使用数组来确保顺序。谢谢你的建议@SergioMartinez,但如果我确切知道类型,我可以使用你提供的链接。如果我不知道呢?我只需要输入字符串,因为您看到没有字段名。我仍在努力,但没有任何效果。是的,我在javascript部分做了与@SergioMartinez完全相同的事情,但在java中,我不知道它会首先出现在哪里。例如,您尝试创建一个datatable,在我使用的第一个字段中,复选框必须有id。但如果不进行排序,我无法确定。您可以发布用于读取JSON的代码吗?您不应该选择第一个字段,而应该选择“CUSTOMER\u SECTOR\u ID”字段。这就是JSON字段名的要点,它类似于映射中的键。如果您需要在表中显示数据,那么您必须知道数据是什么样的,包括字段的名称。但是Customer\u sector\u id字段将始终处于更改状态,我从另一个地方带来它。我将把连接字段放在第一个对象ob json上,这样我就可以以相同的顺序获得。我将此json与用户交互。
  <dependency>
     <groupId>org.codehaus.jackson</groupId>
     <artifactId>jackson-mapper-asl</artifactId>
     <version>1.8.5</version>
  </dependency>