【问题标题】:Parse JSONObject and JSONArray and fix them in the listview解析 JSONObject 和 JSONArray 并在列表视图中修复它们
【发布时间】:2013-02-28 07:13:12
【问题描述】:

如何在JSONObject 中解析JSONArray?。这是我从服务器收到的JSON 响应。

{
"searchdata": {
    "titles": [
        "<b>Laptop</b> - Wikipedia, the free encyclopedia",
        "<b>laptop</b> - definition of <b>laptop</b> by the Free Online Dictionary ..."
    ],
    "desc": [
        "A <b>laptop</b> computer is a personal computer for mobile use. A <b>laptop</b> has most of the same components as a desktop computer, including a display, a keyboard, a ...",
        "lap·top (l p t p) n. A portable computer small enough to use on one&apos;s lap. <b>laptop</b> [ˈlæpˌtɒp], <b>laptop</b> computer. n (Electronics &amp; Computer Science / Computer ..."
    ],
    "links": [
        "http://en.wikipedia.org/wiki/Laptop",
        "http://www.thefreedictionary.com/laptop"
    ],
    "nextpage": ""
}
}

我可以得到JSONObject,但是如何一一获取JSONArray,以便我可以在listview中修复它们。

我想在listview的单行中显示每个数组的值,依此类推....

任何帮助将不胜感激。

【问题讨论】:

标签: java android json android-listview arrays


【解决方案1】:

很简单..

你需要像这样修复代码:

//jsonString is your whole JSONString which you have shown above

JSONObject jObj = new JSONObject(jsonString);
JSONObject jSearchData = jObj.getJSONObject("searchdata");
JSONArray jTitles = jSearchData.getJSONArray("titles");
JSONArray jDesc= jSearchData.getJSONArray("desc");
JSONArray jLinks= jSearchData.getJSONArray("links");
String nextPage = jSearchData.getString("nextpage");
//and so on and so forth

用于获取数组项并将其显示到列表视图中:

//you can iterate over each item and add it to an ArrayList like this:

//i am showing you a single one,follow the same process for other arrays:

ArrayList titlesArray = new ArrayList();

for (int i = 0; i < jTitles.length(); i++) {
String item = jTitles.getString(i);
titlesArray.add(item);

}

接下来,您将这个数组列表作为列表视图的源,如下所示:

 // Get a handle to the list view
    ListView lv = (ListView) findViewById(R.id.ListView01);
 lv.setAdapter(new ArrayAdapter<string>((Your activity class).this,
            android.R.layout.simple_list_item_1, titlesArray));

【讨论】:

  • 嘿Nezam,我已经在数组中添加了每个项目,所以现在我如何在列表视图中调用这些项目。你能帮我解决这个问题吗?
  • 只需将其设置为适配器。就像.. 代替titlesArray 在我发布的代码的最后一行提供您的数组
  • 你能检查一下我发布的问题吗?
  • 如果你在这里听了我的回答..你就不需要发布新问题了。无论如何,我在那里回答了。检查一下。
【解决方案2】:

考虑您的顶级 JSON 将被解析为 JSONObject,随后您可以通过方法 getJSONObject(name) 和 getJSONArray(name) 请求从它接收任何子级别对象和/或数组。你感兴趣的数组在 JSON 层次结构中有两个层次,所以你需要这样的东西:

String json = ...;
JSONObject rootObj = new JSONObject(json);
JSONObject searchObj = rootObj.getJSONObject("searchdata");
JSONArray titlesObj = searchObj.getJSONArray("titles");
JSONArray descsObj = searchObj.getJSONArray("desc");
JSONArray linksObj = searchObj.getJSONArray("links");

您可以像这样迭代任何数组(以titles 为例):

for(int i = 0; i < titlesObj.length(); i++) {
    String title = titlesObj.getString(i);
}

【讨论】:

  • 在迭代时出现错误提示 - Type Mismatch. Cannot convert from Object to Stringat String title = titlesObj.get(i); 为什么会这样?
  • 解决了!谢谢你的回答。
  • @Anupam - 方法应该是getString,而不是get。我已经修复了代码示例。另外,不要忘记接受对您最有帮助的答案!
  • @Nezam 是的,因为我首先看到了这个答案,它解决了我的问题。无论如何谢谢你的回答。
  • 感知速度只有 22 秒,但他的回答有误。Anyways.很高兴你解决了
【解决方案3】:

会有帮助的:

JSONArray  titles = new jSONObject(jsonstring).getJSONObject("searchdata").getJSONArray("titles");

JSONArray  desc  = new jSONObject(jsonstring).getJSONObject("searchdata").getJSONArray("desc");

JSONArray  links = new jSONObject(jsonstring).getJSONObject("searchdata").getJSONArray("links");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-12
    • 2013-01-22
    • 1970-01-01
    • 1970-01-01
    • 2021-03-07
    • 1970-01-01
    相关资源
    最近更新 更多