我需要从对象列表中生成JSON。要做到这一点,我使用以下代码,但我有两个问题:
\
之前添加"
。
JSONObject jsonObj = new JSONObject();
for (Row row : rows) {
jsonObj.put(row.getCode(),row.getValue());
}
myJson.put(jsonObj.toString());
System.err.println("myJson:" + myJson.toString());
输出
myJson:["{\"1234445\":\"Jack"}"]
感谢Sotirios Delimanolis,在从jsonObj中删除.toString()后,第一个问题已经解决了。
答案 0 :(得分:2)
你不能。
已经观察到JSON解析库在是否存在时会有所不同 不是它们使对象成员的排序对调用可见 软件。行为不依赖于成员的实现 排序将是可互操作的,因为它们不会 受到这些差异的影响。
您的实施似乎是那些“可互操作”的实施之一;对象成员的顺序无关紧要。
这意味着它可以使用成员a,b,c序列化对象,以便将它们迭代为b,a,c;除了自己定制对象成员订单外,你无能为力。
答案 1 :(得分:2)
我们在项目中使用比较器来获取Json数组的顺序。 我发布的相同你只是根据你的元素使用你的数组。
GetSortedList是一个数组接受数组并返回已排序列表的方法。 @
List<JsonElement> lJaArray = null;
lJaArray = getSortedList( lJaArrayUnsorted ); // theJson array you want to sort.
public static List getSortedList( JsonArray array ) throws JSONException { List list = new ArrayList(); for( int i = 0; i < array.size(); i++ ) { list.add( array.get( i ) ); } Collections.sort( list, new Comparator() {
@Override public int compare( JsonElement o1, JsonElement o2 ) { if( Integer.parseInt( o1.getAsJsonObject() .get( "com.tangoe.matrix.catalog.CatalogFeatureDetail" ) .getAsJsonObject() .get( "order" ) .toString() .replace( "\"", "" ) ) > Integer.parseInt( o2.getAsJsonObject() .get( "com.tangoe.matrix.catalog.CatalogFeatureDetail" ) .getAsJsonObject() .get( "order" ) .toString() .replace( "\"", "" ) ) ) { return 1; } else if( Integer.parseInt( o1.getAsJsonObject() .get( "com.tangoe.matrix.catalog.CatalogFeatureDetail" ) .getAsJsonObject() .get( "order" ) .toString() .replace( "\"", "" ) ) < Integer.parseInt( o2.getAsJsonObject() .get( "com.tangoe.matrix.catalog.CatalogFeatureDetail" ) .getAsJsonObject() .get( "order" ) .toString() .replace( "\"", "" ) ) ) { return -1; } else { return 0; } } } ); return list; }
我已发布我的元素只需替换其中的数组元素。