3

我正在使用一个函数将列表项、名称、id 添加到 jsonobject 中,并将该对象返回到被调用的函数中,然后一路走来......但我对解析那个 json 字符串有点困惑。

JSONObject obj = abcobj.function();

public JSONObject function()
{
  jsonobj.put("test",list);
  jsonobj.put("name",name);
  jsonobj.put("id",id);
  return jsonobj;
}

System.out.println("Json object"+devid);

输出

 {"test":["test","test1"],"name":"xxxxx","id":"1234"}

请帮我解析这个对象

4

7 回答 7

3

创建 JSONObject 类的实例并使用 for 循环遍历每个 json 项,最后将每个 json 数据存储在变量中。

JSONObject jsonRoot = new JSONObject(jsonData);
  List<String> list = new ArrayList<String>();    
  JSONArray jsonList = jsonRoot.getJSONArray("test");
 for (int i = 0; i < jsonList.length(); i++) {
          list.add(jsonList.getString(i));
   }
 String str_name = jsonRoot.getString("name");
 Integer str_id = Integer.valueOf(jsonRoot.getInt("id"));

希望这会帮助你。

于 2013-08-05T12:52:53.057 回答
2

如果您使用的是org.json。Java解析器,这是如何做到的:

String jsonData = "{\"test\":[\"test\",\"test1\"],\"name\":\"xxxxx\",\"id\":\"1234\"}";

JSONObject jsonRoot = new JSONObject(jsonData);

List<String> list = new ArrayList<String>();    
JSONArray jsonList = jsonRoot.getJSONArray("test");
for (int i = 0; i < jsonList.length(); i++) {
  list.add(jsonList.getString(i));
}

String name = jsonRoot.getString("name");
Integer id = Integer.valueOf(jsonRoot.getInt("id"));
于 2013-08-05T12:34:41.710 回答
0
Object s=devid.get("test");
ArrayList<String> d=new ArrayList<>();
d=(ArrayList<String>) s;
for(Object i: d)
    {
    System.out.println(i);
    }

    System.out.println(obj.get("name"));
    System.out.println(obj.get("id"));
*output*

test
test1
xxxxx 
1234
于 2013-08-06T03:33:48.700 回答
0

你到底想解析什么?例如,如果您想要访问 test1 中的数据,则需要检索 test[1] 然后从那里获取数据。如果您想知道为什么会在列表中看到对象的名称,我的猜测是您有一个 toString,您只在要添加到该列表的类中显示对象的名称。

需要注意的另一件事是,您在输出中显示给我们的那个 json 不是有效的 json。或者更确切地说,它有 2 个同名字段,不建议这样做,因为一个对象只能有 1 个同名字段。

您可以发布您用于创建和解析 json 的所有代码吗?另外,您是否考虑过使用 GSON?来自 Google 的一个非常简单而强大的 JSON 库。

于 2013-08-05T12:25:15.310 回答
0

我假设您想将interestKeys 存储在列表中。

使用org.json库:

JSONObject obj = new JSONObject("{interests : [{interestKey:Dogs},{interestKey:Cats}]}");

List<String> list = new ArrayList<String>();
JSONArray array = obj.getJSONArray("interests");
for(int i = 0 ; i < array.length() ; i++){
    list.add(array.getJSONObject(i).getString("interestKey"));
}
于 2013-08-05T12:28:43.703 回答
0

我认为您可以使用以下方法之一:

第一个:定义域对象并使用框架将字符串“反序列化”到该对象中。GSON/Jackson 应该在这里为你工作

例子:

public class MyObject {
   String [] test;
   String name; // the second name in example is wrong json 
}

现在像这样使用 GSON:

 MyObject obj = new Gson().fromJson(yourStringComesHere, MyObject.class);
 obj.name

当然,您应该提供对 MyObject 类中数据字段的 getter/private 访问,但这几乎解释了这个想法。

或者,您可以继续使用 JSONObject,它应该有 getter,如下所示:

JSONObject jsonObject = getObjectSomehow(); jsonObject.get("名称");

希望这可以帮助

于 2013-08-05T12:30:38.197 回答
0

您可以使用以下代码来解析 json:

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

  Map<String,Object> map = new HashMap<String,Object>();
  ArrayList<String> testList = new ArrayList<String>();
  String jsonString;
  Gson gson = new Gson();

try {
        jsonString = "{"test":["test","test1"],"name":"xxxxx","id":"1234"}";
        map = (Map<String,Object>) gson.fromJson(jsonString, map.getClass());
        testList = (ArrayList<String>) map.get("test");
 }
 catch (Exception e) {


 }
于 2017-04-13T15:46:44.137 回答