将JSON解析为ListView友好输出

时间:2009-12-30 21:50:33

标签: android json

所以我有这个JSON,然后我的活动检索到一个字符串:

    {"popular":
        {"authors_last_month": [
         {
            "url":"http://activeden.net/user/OXYLUS",
            "item":"OXYLUS",
            "sales":"1148",
            "image":"http://s3.envato.com/files/15599.jpg"
         },
         {
            "url":"http://activeden.net/user/digitalscience",
            "item":"digitalscience",
            "sales":"681",
            "image":"http://s3.envato.com/files/232005.jpg"
         }
         {
            ...
         }
        ],
        "items_last_week": [
         {
            "cost":"4.00",
            "thumbnail":"http://s3.envato.com/files/227943.jpg",
            "url":"http://activeden.net/item/christmas-decoration-balls/75682",
            "sales":"43",
            "item":"Christmas Decoration Balls",
            "rating":"3",
            "id":"75682"
         },
         {
            "cost":"30.00",
            "thumbnail":"http://s3.envato.com/files/226221.jpg",
            "url":"http://activeden.net/item/xml-flip-book-as3/63869",
            "sales":"27",
            "item":"XML Flip Book / AS3",
            "rating":"5",
            "id":"63869"
         },
         {
            ...
         }],
        "items_last_three_months": [
         {
            "cost":"5.00",
            "thumbnail":"http://s3.envato.com/files/195638.jpg",
            "url":"http://activeden.net/item/image-logo-shiner-effect/55085",
            "sales":"641",
            "item":"image logo shiner effect",
            "rating":"5",
            "id":"55085"
         },
         {
            "cost":"15.00",
            "thumbnail":"http://s3.envato.com/files/180749.png",
            "url":"http://activeden.net/item/banner-rotator-with-auto-delay-time/22243",
            "sales":"533",
            "item":"BANNER ROTATOR with Auto Delay Time",
            "rating":"5",
            "id":"22243"},
         {
            ...
         }]
    }
}

它也可以被访问here,虽然因为它是一个很长的字符串,我已经修改了上面的内容以显示所需的内容。

基本上,我希望能够访问“items_last_week”中的项目并创建它们的列表 - 最初我的计划是让左边的“缩略图”旁边有“项目”,但是从播放今天使用SDK似乎太难或不可能实现这一点,所以我非常乐意在列表中使用'items_last_week'中的'item'数据。

来自php我很难使用任何可用于Java的JSON库,因为它看起来不仅仅是我需要反序列化的一行代码(我认为这是正确的词) JSON,它们似乎都需要某种形式的附加类,除了JSONArray / JSONObject脚本我不喜欢items_last_week嵌套的事实(再次,我认为这是JSON术语)并且需要很长时间在Android模拟器上运行。

因此,实际上,我需要一种(最好是简单的)方法将items_last_week数据传递给ListView。我知道我需要一个自定义适配器,我可能会理解,但我无法理解,无论我花了多少时间试图找出它,如何访问JSON字符串的某些部分..

2 个答案:

答案 0 :(得分:9)

  

最初我的计划是拥有   左边的'缩略图'和   旁边的“项目”,但是从播放   今天就出现了SDK   太难或不可能实现   此

这远非不可能,但除非你为你使用something that already wraps up that pattern(并且希望合理地“正确”),否则做出正确的做法将是乏味的。在网络上,性能/带宽问题是用户的问题 - 在移动设备中,它们是你的问题。

  

因为它似乎不仅仅是一个   我需要的代码行   反序列化(我认为这是正确的   字)JSON

new JSONObject(data)是一行代码。现在,获取 JSON,我认为你是从前面提到的URL做的,将是几行代码。解析JSON和从互联网上获取它都不是Android独有的 - 所有这些在桌面Java应用程序,Java servlet或其他任何东西上看起来都是一样的。

  

除了JSONArray / JSONObject之外   脚本我有哪些不喜欢的   事实上items_last_week是嵌套的

我没有遇到使用文件展示等结构解析JSON的问题。此外,这几乎不是Android独有的 - JSON解析器在许多其他基于Java的项目中使用。

  

并且需要很长时间才能继续运行   Android模拟器

仿真器的速度与开发机器的速度有关。对我来说,模拟器通常比实际的手机硬件慢...而我的桌面是四核的。请记住,仿真器假装是在PC上运行的ARM芯片组,将ARM操作码动态转换为x86操作码,因此它不会很快,也不会很好地利用多个内核。

  

所以,实际上,我需要一个(最好是   简单)通过的方式   items_last_week数据到ListView。

Android中没有真正构建任意JSON结构,包含任意数据,并直接将其转换为ListView。这不是JSON独有的 - XML会出现类似的现象。

您的选择是:

  1. 创建一个包装已解析JSON的自定义ListAdapter
  2. 将解析后的JSON转换为MatrixCursor(想想2D数据数组)并使用SimpleCursorAdapter
  3. 将解析后的JSON转换为ArrayList<String>并使用ArrayAdapter
  4. 从短期来看,选项#3可能是最简单的。

      

    我知道我需要一个自定义   适配器,我可以得到我的   四处走走,但我无法理解,   不管我有多少天   只是花了点钱,   如何访问JSON的某些部分   串..

    这个问题在援助方面太过模糊。您可以考虑打开一个单独的问题,标记为Java和JSON,您可以在其中详细了解json.org解析器遇到问题的位置。

答案 1 :(得分:1)

我其实只是回答了一个问题。检查一下非常简单的自定义适配器代码来处理JSON。

JSONAdapter