我写了一些代码;
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库。
答案 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>