【问题标题】:How to handle json array parsing with Jackson parser in Android如何在 Android 中使用 Jackson 解析器处理 json 数组解析
【发布时间】:2013-10-07 18:42:47
【问题描述】:

这是我的 json 数据结构。它具有与此类似的大量数据。我正在使用杰克逊解析器来解析这个。

{
 "dealers":
 {
  "google.com":{"id":1,"merchantname":"google","status":"active"},
  "apple.com":{"id":2,"merchantname":"apple","status":"active"}
 }
}

代码:

    while (jParser.nextToken() != JsonToken.END_OBJECT) {
            jParser.nextToken();

            while (jParser.nextToken() != JsonToken.END_OBJECT) {
                jParser.nextToken();

                while (jParser.nextToken() != JsonToken.END_OBJECT) {
                    jParser.nextToken();
                    String fieldname = jParser.getCurrentName();
                    if (fieldname != null) {

                        if ("id".equals(fieldname)) {
                            jParser.nextToken();
                            if (jParser.getText() != null)
                                merchantID = jParser.getText();
                            else
                                merchantID = "";
                        }

                        if ("merchantname".equals(fieldname)) {
                            jParser.nextToken();
                            if (jParser.getText() != null)
                                merchantname = jParser.getText();
                            else
                                merchantname = "";
                        }

                        if ("status".equals(fieldname)) {
                            jParser.nextToken();
                            if (jParser.getText() != null)
                                name = jParser.getText();
                        }

                    }

                }
            }
        }

数据未正确解析。搞砸了 jParser.nextToken() 方法。谁能指出这里的错误?

【问题讨论】:

  • 你的json里没有数组
  • 更新了代码。它在循环中无限循环。

标签: java android json parsing jackson


【解决方案1】:

JSON 中的“dealers”属性表示Map<String, POJO_CLASS>。您可以轻松地将其转换为以下 POJO 类:

class RootEntity {

    private Map<String, Entity> dealers;

    //getters,setters, toString
}

class Entity {

    private int id;
    private String merchantname;
    private String status;

    //getters,setters, toString
}

示例用法:

import java.io.File;
import java.io.IOException;
import java.util.Map;

import com.fasterxml.jackson.databind.ObjectMapper;

public class JacksonProgram {

    public static void main(String[] args) throws IOException {
        ObjectMapper mapper = new ObjectMapper();
        System.out.println(mapper.readValue(new File("/data/x.json"), RootEntity.class));
    }
}

打印:

RootEntity [dealers={google.com=Entity [id=1, merchantname=google, status=active], apple.com=Entity [id=2, merchantname=apple, status=active]}]

【讨论】:

  • 我收到 com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException:无法识别的字段“id”(com.juteralabs.perkmobile.models.AllDealerssModel 类),未标记为可忽略(3 个已知属性: , "id", "merchantname", "status" [截断]])
  • 1.不,但是您的代码真的很难看,而且很难维护。 2. 此异常表明您想将 JSON 反序列化为错误的 POJO,或者您的 JSON 看起来与所讨论的不同。
  • 它有效。谢谢。但我只是想知道我发布的代码有什么问题?无法找出该 while 循环中的错误。
  • 你是如何创建“jParser”对象的?在这种情况下,调试器是你的朋友。
  • jParser = jfactory.createParser(data);数据是一个字符串
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-07
相关资源
最近更新 更多