我正在使用这里提供的JSON库http://www.json.org/java/index.html将我必须的json字符串转换为CSV。但我的问题是,键的顺序在转换后丢失了。
这是转换代码:
JSONObject jo = new JSONObject(someString);
JSONArray ja = jo.getJSONArray("items");
String s = CDL.toString(ja);
System.out.println(s);
这是“someString”的内容:
{
"items":
[
{
"WR":"qwe",
"QU":"asd",
"QA":"end",
"WO":"hasd",
"NO":"qwer"
},
]
}
这就是结果:
WO,QU,WR,QA,NO
hasd,asd,qwe,end,qwer
而我期望的是保持密钥的顺序:
WR,QU,QA,WO,NO
qwe,asd,end,hasd,qwer
有没有什么方法可以用这个库得到这个结果?如果没有,有没有其他库可以提供在结果中保持键顺序的功能?
发布于 2010-12-23 14:29:10
解决了。
我在这里使用JSON.simple库https://code.google.com/p/json-simple/读取JSON字符串以保持键的顺序,并使用JavaCSV库http://sourceforge.net/projects/javacsv/将其转换为CSV格式。
发布于 2011-11-02 22:05:02
维护秩序是非常简单的。在维护从DB层到UI层的顺序时,我也遇到了同样的问题。
打开JSONObject.java文件。它在内部使用不维护顺序的HashMap。
将其更改为LinkedHashMap:
//this.map = new HashMap();
this.map = new LinkedHashMap();
这对我很有效。请在评论中让我知道。我建议JSON库本身应该有另一个维护顺序的JSONObject类,比如JSONOrderdObject.java。我在选择名字方面很差。
发布于 2016-03-04 21:20:52
使用reflect的另一个老套的解决方案:
JSONObject json = new JSONObject();
Field map = json.getClass().getDeclaredField("map");
map.setAccessible(true);//because the field is private final...
map.set(json, new LinkedHashMap<>());
map.setAccessible(false);//return flag
https://stackoverflow.com/questions/4515676
复制相似问题