【问题标题】:JSON parsing to Java - Android applicationJSON 解析为 Java - Android 应用程序
【发布时间】:2011-07-21 08:50:35
【问题描述】:

我需要在 Java Android Appl 中解析 json 字符串的帮助。

JSON 文件文本:

{"data":{"columns":["location_id","name","description","latitude","longitude","error","type","type_id","icon_media_id","item_qty","hidden","force_view"],"rows":[[2,"Editor","",43.076014654537,-89.399642451567,25,"Npc",1,0,1,"0","0"],[3,"Dow Recruiter","",43.07550842555,-89.399381822662,25,"Npc",2,0,1,"0","0"] [4,"Protestor","",43.074933,-89.400438,25,"Npc",3,0,1,"0","0"],[5,"State Legislator","",43.074868061524,-89.402136196317,25,"Npc",4,0,1,"0","0"],[6,"Marchers Bascom","",43.075296413877,-89.403374183615,25,"Node",22,0,1,"0","0"] [7,"Mary","",43.074997865584,-89.404967573966,25,"Npc",7,0,1,"0","0"]]},"returnCode":0,"returnCodeDescription":null}

如何获取值:location_id、名称、纬度、经度。 谢谢,迈克尔。

【问题讨论】:

  • @THelper 没错,他至少应该先做谷歌。
  • @THelper 等人:恕我直言,但我看不到要求任何人提供代码的问题中的一行。我确实注意到问题已被修改,这为我方面的误解留下了空间,在这种情况下,我深表歉意。尽管如此,我认为应该将敌对的 cmets 保持在最低限度。请尊重线程创建者是新成员。如果有人真的想提供帮助,那么请以更具教育性和友好的语气来帮助...
  • @dbm。你说得对。现在我重读了自己的评论,它看起来比我预期的更“敌对”。很抱歉。
  • @THelper - 似乎发生了链接失效 - 域名 androidcompetencycenter.com 正在出售。 :-/

标签: java android json parsing


【解决方案1】:

使用手动解析可以这样实现:

            JSONArray  pages     =  new JSONArray(jsonString);
            for (int i = 0; i < pages.length(); ++i) {
                JSONObject rec = pages.getJSONObject(i);
                JSONObject jsonPage =rec.getJSONObject("page");
                String address = jsonPage.getString("url");
                String name = jsonPage.getString("name");
                String status =  jsonPage.getString("status");
}

在您的情况下,请注意您的外部元素数据是 JSONObject 类型,然后您有一个 JSONArray

我的 json 文件:

[{"page":{"created_at":"2011-07-04T12:01:00Z","id":1,"name":"Unknown Page","ping_at":"2011-07-04T12:06:00Z","status":"up","updated_at":"2011-07-04T12:01:00Z","url":"http://www.iana.org/domains/example/","user_id":2}},{"page":{"created_at":"2011-07-04T12:01:03Z","id":3,"name":"Down Page","ping_at":"2011-07-04T12:06:03Z","status":"up","updated_at":"2011-07-04T12:01:03Z","url":"http://www.iana.org/domains/example/","user_id":2}}] 

请注意,我的从 [ 开始,这意味着一个数组,但你的从 { 然后你有 [ 数组里面。如果您使用调试器运行它,您可以准确地看到 json 对象中的内容。

还有更好的方法,例如:

  1. Jackson
  2. Jackson-JR(轻量级杰克逊)
  3. GSON

所有这些都可用于将 Java 对象转换为它们的 JSON 表示。它还可用于将 JSON 字符串转换为等效的 Java 对象。

【讨论】:

  • 我正在尝试使用您的代码并对其进行修改,但它仍然无法正常工作。你能告诉我你的例子的json文件吗?
  • [{"page":{"created_at":"2011-07-04T12:01:00Z","id":1,"name":"未知页面","ping_at": "2011-07-04T12:06:00Z","status":"up","updated_at":"2011-07-04T12:01:00Z","url":"iana.org/domains/example/","user_id":2}},{"page ":{"created_at":"2011-07-04T12:01:03Z","id":3,"name":"Down Page","ping_at":"2011-07-04T12:06:03Z", "status":"up","updated_at":"2011-07-04T12:01:03Z","url":"iana.org/domains/example/","user_id":2}}] 请注意,我的从 [ 开始,这意味着一个数组,但你的从{ 然后你有 [ 里面的数组
【解决方案2】:

首先,您需要了解android中的Json解析,因此首先阅读以下内容:JSONObject,在该类中,您将看到以下方法:

  1. getJSONArray(字符串名称)
  2. getJSONObject(字符串名称)
  3. getString(字符串名称)

以及在 android 中实现 JSON 解析时要使用的更多方法。

更新:

如果您仍然感到困惑,请单击下面的链接以在网络上查看许多示例:Android JSON Parsing

【讨论】:

    【解决方案3】:

    您需要使用 GSON 库 http://code.google.com/p/google-gson/

    对象示例

    class BagOfPrimitives {
      private int value1 = 1;
      private String value2 = "abc";
      private transient int value3 = 3;
      BagOfPrimitives() {
        // no-args constructor
      }
    }
    

    (序列化)

    BagOfPrimitives obj = new BagOfPrimitives();
    Gson gson = new Gson();
    String json = gson.toJson(obj);  
    ==> json is {"value1":1,"value2":"abc"}
    

    请注意,您不能使用循环引用序列化对象,因为这将导致无限递归。

    (反序列化)

    BagOfPrimitives obj2 = gson.fromJson(json, BagOfPrimitives.class);   
    ==> obj2 is just like obj
    

    【讨论】:

    • GSON 与 Android 兼容吗?
    • 是的,它工作得非常好! (用它来持久化对象而无需关系数据库的麻烦)
    • 好的,但是为什么 OP 应该使用 GSON 而不是 JSON?
    • 因为它的面向对象且易于使用。您只需定义类,然后使用 GSON 解析 JSON 字符串即可使用该类
    【解决方案4】:

    如果您想轻松导航 Json 树,您可以使用 JSON Path,即查询系统,类似于 XPath to XML,您可以使用它使用文本表达式在 json 树中选择一些元素。

    http://code.google.com/p/json-path/这是一个很好的实现

    如果你只是想解析那个 JSon,你可以使用谷歌的 Gson(我猜这与 Android 兼容)。

    【讨论】:

      【解决方案5】:

      This 包含您案例的完整示例。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-01-18
        • 2013-02-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多