如何将JSONArray转换为JSONObject?

13

基本上我有:

JSONArray j = new JSONArray();
j.add(new JSONObject()); //JSONObject has a bunch of data in it
j.add(new JSONArray());  //JSONArray has a bunch of data in it

现在我想将那个JSONArray转换为一个JSONObject,并且包含相同的信息。这样我可以传递该对象,然后想取什么信息就可以从对象中获取。如果有帮助,谢谢。


我尝试使用JSONArray.toJSONObject(arg),但是我对JSON不熟悉,无法弄清楚API要求在arg中放入什么。http://json-lib.sourceforge.net/apidocs/net/sf/json/JSONArray.html#toJSONObject(net.sf.json.JSONArray) - Grammin
4个回答

34

通常,一个Json对象会将你的值(包括数组)作为命名字段包含在内。因此,类似于:

JSONObject jo = new JSONObject();
JSONArray ja = new JSONArray();
// populate the array
jo.put("arrayName",ja);

在JSON中,它将是{"arrayName":[...]}。


1
是的,这就是我需要做的,而不仅仅是将我的值添加到一个数组中,我将它们添加到一个对象中,并为每个值分配了一个名称标识符。谢谢。 - Grammin
2
如果没有“arrayName”怎么办? - esQmo_

3

我有一个像这样的JSONObject:{"status":[{"Response":"success"}]}

如果我想自动将JSONArray转换为JSONObject,而不使用任何静态值,可以使用以下代码:

JSONArray array=new JSONArray();
JSONObject obj2=new JSONObject();
obj2.put("Response", "success");
array.put(obj2);
JSONObject obj=new JSONObject();
obj.put("status",array);

将JSONArray转换为JSON对象:

Iterator<String> it=obj.keys();
        while(it.hasNext()){
String keys=it.next();
JSONObject innerJson=new JSONObject(obj.toString());
JSONArray innerArray=innerJson.getJSONArray(keys);
for(int i=0;i<innerArray.length();i++){
JSONObject innInnerObj=innerArray.getJSONObject(i);
Iterator<String> InnerIterator=innInnerObj.keys();
while(InnerIterator.hasNext()){
System.out.println("InnInnerObject value is :"+innInnerObj.get(InnerIterator.next()));


 }
}

2

代码:

List<String> list = new ArrayList<String>();

list.add("a");

JSONArray array = new JSONArray();

for (int i = 0; i < list.size(); i++) {
    array.put(list.get(i));
}
JSONObject obj = new JSONObject();

try {
    obj.put("result", array);
} catch (JSONException e) {
    e.printStackTrace();
}

1

你不能最初将数据作为JSONObject获取吗?

也许一开始就将字符串解析为JSONObject和JSONArray?JSON字符串来自哪里?

我不确定是否可能将JsonArray转换为JsonObject。

我假设你正在使用json.org中的以下内容。

  • JSONObject.java
    JSONObject是一个无序的名称/值对集合。它的外部形式是一个用花括号包裹的字符串,名称和值之间用冒号分隔,值和名称之间用逗号分隔。内部形式是一个对象,具有通过名称访问值的get()和opt()方法,以及通过名称添加或替换值的put()方法。这些值可以是以下任何类型:布尔值、JSONArray、JSONObject、数字和字符串,或者是JSONObject.NULL对象。

  • JSONArray.java
    JSONArray是一个有序的值序列。它的外部形式是一个用方括号包裹的字符串,值之间用逗号分隔。内部形式是一个对象,具有通过索引访问值的get()和opt()方法,以及添加或替换值的put()方法。这些值可以是以下任何类型:布尔值、JSONArray、JSONObject、数字和字符串,或者是JSONObject.NULL对象。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接