草庐IT

android - 将 JSON 解析为 ListView 友好的输出

coder 2023-11-30 原文

所以我有这个 JSON,然后我的 Activity 将其检索到一个字符串:

    {"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”的“项目”数据。

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

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

最佳答案

originally my plan was to have the 'thumbnail' on the left with the 'item' next to it, but from playing around with the SDK today it appears too difficult or impossible to achieve this

这远非不可能,但除非您使用 something that already wraps up that pattern,否则正确操作会很乏味。对你来说(希望这是合理的“正确”)。在网络上,性能/带宽问题是用户的问题——在移动设备上,它们是您的问题。

as it appears to be much more than a line of code which I will need to deserialize (I think that's the right word) the JSON

new JSONObject(data)是一行代码。现在,获取 JSON(我假设您是从上述 URL 执行的)将需要几行代码。 JSON 的解析和从互联网上获取它都不是 Android 独有的——所有这些在桌面 Java 应用程序、Java servlet 或其他任何东西上看起来都是一样的。

apart from the JSONArray/JSONObject script I have which doesn't like the fact that items_last_week is nested

我在使用您的文件展示的结构解析 JSON 时没有遇到问题。此外,这并不是 Android 独有的——许多其他基于 Java 的项目都使用了 JSON 解析器。

and takes an awful long time to run on the Android emulator

模拟器的速度与开发机器的速度相关。对我来说,模拟器通常比实际的手机硬件慢……而且我的台式机是四核的。请记住,模拟器假装是在您的 PC 上运行的 ARM 芯片组,即时将 ARM 操作码转换为 x86 操作码,因此它不会很快,也不会很好地利用多核。

So, in effect, I need a (preferably simple) way to pass the items_last_week data to a ListView.

Android 中并没有真正内置任何东西来采用任意 JSON 结构和任意数据,并将其直接倒入 ListView 中。 .这不是 JSON 独有的——XML 也会表现出类似的现象。

您的选择是:

  1. 创建自定义 ListAdapter包装已解析的 JSON。
  2. 将解析后的 JSON 转换为 MatrixCursor (考虑二维数据数组)并使用 SimpleCursorAdapter .
  3. 将解析后的 JSON 转换为 ArrayList<String>并使用 ArrayAdapter .

就短期而言,选项 #3 可能是最简单的。

I understand I will need a custom adapter which I can probably get my head around but I cannot understand, no matter how much of the day I've just spent trying to figure it out, how to access certain parts of a JSON string..

而且这个问题对于提供帮助的方式来说太模糊了。您可能会考虑打开一个单独的问题,标记为 Java 和 JSON,您可以在其中详细了解 json.org 解析器出现问题的位置。

关于android - 将 JSON 解析为 ListView 友好的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1982700/

有关android - 将 JSON 解析为 ListView 友好的输出的更多相关文章

  1. Ruby 解析字符串 - 2

    我有一个字符串input="maybe(thisis|thatwas)some((nice|ugly)(day|night)|(strange(weather|time)))"Ruby中解析该字符串的最佳方法是什么?我的意思是脚本应该能够像这样构建句子:maybethisissomeuglynightmaybethatwassomenicenightmaybethiswassomestrangetime等等,你明白了......我应该一个字符一个字符地读取字符串并构建一个带有堆栈的状态机来存储括号值以供以后计算,还是有更好的方法?也许为此目的准备了一个开箱即用的库?

  2. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  3. ruby - 用逗号、双引号和编码解析 csv - 2

    我正在使用ruby​​1.9解析以下带有MacRoman字符的csv文件#encoding:ISO-8859-1#csv_parse.csvName,main-dialogue"Marceu","Giveittohimóhe,hiswife."我做了以下解析。require'csv'input_string=File.read("../csv_parse.rb").force_encoding("ISO-8859-1").encode("UTF-8")#=>"Name,main-dialogue\r\n\"Marceu\",\"Giveittohim\x97he,hiswife.\"\

  4. ruby - 检查 "command"的输出应该包含 NilClass 的意外崩溃 - 2

    为了将Cucumber用于命令行脚本,我按照提供的说明安装了arubagem。它在我的Gemfile中,我可以验证是否安装了正确的版本并且我已经包含了require'aruba/cucumber'在'features/env.rb'中为了确保它能正常工作,我写了以下场景:@announceScenario:Testingcucumber/arubaGivenablankslateThentheoutputfrom"ls-la"shouldcontain"drw"假设事情应该失败。它确实失败了,但失败的原因是错误的:@announceScenario:Testingcucumber/ar

  5. ruby - 通过 erb 模板输出 ruby​​ 数组 - 2

    我正在使用puppet为ruby​​程序提供一组常量。我需要提供一组主机名,我的程序将对其进行迭代。在我之前使用的bash脚本中,我只是将它作为一个puppet变量hosts=>"host1,host2"我将其提供给bash脚本作为HOSTS=显然这对ruby​​不太适用——我需要它的格式hosts=["host1","host2"]自从phosts和putsmy_array.inspect提供输出["host1","host2"]我希望使用其中之一。不幸的是,我终其一生都无法弄清楚如何让它发挥作用。我尝试了以下各项:我发现某处他们指出我需要在函数调用前放置“function_”……这

  6. ruby-on-rails - Rails HTML 请求渲染 JSON - 2

    在我的Controller中,我通过以下方式在我的index方法中支持HTML和JSON:respond_todo|format|format.htmlformat.json{renderjson:@user}end在浏览器中拉起它时,它会自然地以HTML呈现。但是,当我对/user资源进行内容类型为application/json的curl调用时(因为它是索引方法),我仍然将HTML作为响应。如何获取JSON作为响应?我还需要说明什么? 最佳答案 您应该将.json附加到请求的url,提供的格式在routes.rb的路径中定义。这

  7. ruby - 如何进行排列以有效地定制输出 - 2

    这是一道面试题,我没有答对,但还是很好奇怎么解。你有N个人的大家庭,分别是1,2,3,...,N岁。你想给你的大家庭拍张照片。所有的家庭成员都排成一排。“我是家里的friend,建议家庭成员安排如下:”1岁的家庭成员坐在这一排的最左边。每两个坐在一起的家庭成员的年龄相差不得超过2岁。输入:整数N,1≤N≤55。输出:摄影师可以拍摄的照片数量。示例->输入:4,输出:4符合条件的数组:[1,2,3,4][1,2,4,3][1,3,2,4][1,3,4,2]另一个例子:输入:5输出:6符合条件的数组:[1,2,3,4,5][1,2,3,5,4][1,2,4,3,5][1,2,4,5,3][

  8. ruby-on-rails - 我更新了 ruby​​ gems,现在到处都收到解析树错误和弃用警告! - 2

    简而言之错误:NOTE:Gem::SourceIndex#add_specisdeprecated,useSpecification.add_spec.Itwillberemovedonorafter2011-11-01.Gem::SourceIndex#add_speccalledfrom/opt/local/lib/ruby/site_ruby/1.8/rubygems/source_index.rb:91./opt/local/lib/ruby/gems/1.8/gems/rails-2.3.8/lib/rails/gem_dependency.rb:275:in`==':und

  9. ruby-on-rails - 如何使用 Rack 接收 JSON 对象 - 2

    我有一个非常简单的RubyRack服务器,例如:app=Proc.newdo|env|req=Rack::Request.new(env).paramspreq.inspect[200,{'Content-Type'=>'text/plain'},['Somebody']]endRack::Handler::Thin.run(app,:Port=>4001,:threaded=>true)每当我使用JSON对象向服务器发送POSTHTTP请求时:{"session":{"accountId":String,"callId":String,"from":Object,"headers":

  10. ruby - 将 spawn() 的标准输出/标准错误重定向到 Ruby 中的字符串 - 2

    我想使用spawn(针对多个并发子进程)在Ruby中执行一个外部进程,并将标准输出或标准错误收集到一个字符串中,其方式类似于使用Python的子进程Popen.communicate()可以完成的操作。我尝试将:out/:err重定向到一个新的StringIO对象,但这会生成一个ArgumentError,并且临时重新定义$stdxxx会混淆子进程的输出。 最佳答案 如果你不喜欢popen,这是我的方法:r,w=IO.pipepid=Process.spawn(command,:out=>w,:err=>[:child,:out])

随机推荐