【问题标题】:JSON Parsing for Android - nested items?Android的JSON解析 - 嵌套项目?
【发布时间】:2012-01-06 06:07:32
【问题描述】:

我已经使用这个网站多年,但从未发布过。我很难过,希望有人能帮助我。

我使用的代码与 Slicekick 在此处发布的 JSON parsing app "no data"? 非常相似,但似乎无法弄清楚如何解析此 JSON 文件。我已经编辑了他的 JSON 信息以反映我试图解析的确切格式以节省空间/时间。如何解析“结果”以便查询“名称”和“类型”?像他对“Similar”和“Info”的问题,我如何解析下面文件中的“Info”和“Results”?

这里是一个 JSON 文件的示例,它以我正在使用的确切格式进行编辑:

{
"head": {
    "title": "Music",
    "status": "200"
},
"Info": [
    {
        "Name": "Mos Def",
        "Type": "music",
        "Results": [
            {
                "Name": "Talib Kweli",
                "Type": "music"
            },
            {
                "Name": "Black Star",
                "Type": "music"
            },
            {
                "Name": "Little Brother",
                "Type": "music"
            }
         ]
    }, 
    {
        "Name": "Mos Def",
        "Type": "Vehicles",
        "Results": [
            {
                "Name": "Chevy",
                "Type": "Car"
            },
            {
                "Name": "Ford",
                "Type": "Car"
            },
            {
                "Name": "Pontiac",
                "Type": "Car"
            }
         ]
      }
   ]
}

我可能感兴趣的代码部分是:

...我做了一个httpget ...内置在 StringBuilder 中 ...使用 StringBuilder 的结果创建一个 JSONObject

   jArray = new JSONObject(result);

...然后返回那个

然后...

   JSONArray  Info = json.optJSONArray("Info");

   System.out.println("HERE IS INFO: ");
   System.out.println(Info);
   //System.out.println("HERE IS RESULTS: ");
   //System.out.println(Results);

基本上这就是我难过的地方。 我打印了一些信息,试图缩小问题的范围。

解析“信息”允许我搜索:“名称”:“Mos Def”“类型”:“音乐”-and- “名称”:“Mos Def”“类型”:“车辆”

用“结果”替换“信息”搜索不会给我任何数据。 (未找到)

有什么想法吗?

【问题讨论】:

  • 没有人会为你编码,你需要自己做。
  • 不是在找编码员。正在寻找一个有提示或想法的人来引导我朝着正确的方向前进。

标签: android json parsing nested


【解决方案1】:

这是肯定的,因为Results 是 JSONArray Info 中的一个 JSONArray。所以你应该尝试这样的事情,

JSONArray  Info = json.optJSONArray("Info");
JSONArray Results = null;
for (int i = 0; i < array.length(); i++) {
            JSONObject object = Info.getJSONObject(i);
            Results results = object.getJSONArray("Results");
        }

【讨论】:

  • 非常感谢您的回复。这就是我真正需要的一点提示。通过使用您发布的内容和 Jitendra 发布的内容 - 我现在已经弄清楚了。再次感谢!如果您认为它可以帮助其他人,我会发布最终使它起作用的内容。
  • @lalit Bro 我也面临 json 解析问题。创建 JsonObject 时出现 JsonException,这是我的问题的链接。 (问题)[stackoverflow.com/questions/17523805/…请帮助我
【解决方案2】:

你需要调用你的解析代码如下:

jArray = new JSONObject(result);
for(int i=0;i<jArray.length();i++)
{
    JSONArray  Info = json.optJSONArray("Info");
    for(int j=0;j<Info.length();j++){
    {
         System.out.println("HERE IS INFO: ");
         System.out.println(Info);
         //System.out.println("HERE IS RESULTS: ");
         JSONObject obj=Info.getJSONObject(j);
         JSONArray results=obj.getJSONArray("Results");
         for(int k=0; k<results.length();
         {
             //Process Results
         }
}

【讨论】:

  • 这会给出输出吗?我不这么认为,因为 Results 位于 JSONObject 中,而您正试图直接访问它。
  • 是的,它可能需要一些版本,我已经相应编辑发布,但仍然不是编译代码。
  • 通过阅读您的回复和 Lalit 的回复,我能够将一些东西放在一起,让它发挥作用。我非常感谢你抽出时间来发帖!如果您认为它可以帮助任何人,我会发布我最终得到的工作解决方案。
【解决方案3】:

最好使用 GSON,它来自 Google,使用它解析 JSON 是小菜一碟..!! 这是一个很好的入门教程,您会更喜欢使用 GSON。

Link for GSON tutorial

【讨论】:

  • 感谢您的回复。我已经阅读了它,但可能很快就会检查出来。由于某种原因尝试导入 jar 文件时遇到问题,所以我继续前进(一直试图找出包含的 JSON 库。)
  • code.google.com/p/google-gson/downloads/list下载gson,下载后在你的droid项目中创建一个“lib”文件夹,然后将其移动到那里,然后在eclipse中右键单击项目属性并添加库,就是这样!
  • 谢谢,凯吹。我会试一试的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-07
相关资源
最近更新 更多