Java 如何使用Jackson从Json文件中获取未命名属性?

Java 如何使用Jackson从Json文件中获取未命名属性?,java,json,jackson,Java,Json,Jackson,我有一个JSON提要,我正试图解析它: { "test": [ "5", { "data": "someData", "number": "9" }, { "data": "someData", "number": "9" } ] } 我正在使用Jackson为我解析JSON文件并使用注释: priv

我有一个
JSON
提要,我正试图解析它:

{
    "test": [
        "5",
        {
            "data": "someData",
            "number": "9"
        },
        {
            "data": "someData",
            "number": "9"
        }
    ]
}
我正在使用
Jackson
为我解析
JSON
文件并使用注释:

  private ArrayList<Test> test = new ArrayList<Test>();
  /**
   * @param test the test to set
   */
  public void setTest(ArrayList<Test> test) {
    this.test = test;
  }
}

如果我从我的
JSON
中删除
5
,它可以正常工作。但是
5
将在提要中,因此我需要一种方法来解析它。一般来说,我对jackson和annotations完全陌生,在花了一天的大部分时间试图弄明白这一点之后,我需要一些帮助


如果“5”没有命名,我怎么能忽略它呢?我已经尝试创建了一个容器类,它包含一个字符串和ArrayList,并将其作为参数传递给setTest方法,但这也不起作用。

您的Java测试类表示数组中的对象,
{“data”:“someData”,“number”:“9”}
。您需要定义另一个Java类来映射您的测试JSON对象,比如

class TopLevel {
    private int count;
    List<Test> testList = new ArrayList<Test>();

    // ...
    //setters and getters
}
类顶级{
私人整数计数;
List testList=new ArrayList();
// ...
//二传手和接球手
}

您可以为此列表编写自定义反序列化程序:

class TestListDeserializer extends JsonDeserializer<List<Test>> {
    @Override
    public List<Test> deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException,
            JsonProcessingException {
        List<Test> result = new ArrayList<Test>();
        while (jp.nextToken() != JsonToken.END_ARRAY) {
            if (jp.getCurrentToken() == JsonToken.START_OBJECT) {
                result.add(jp.readValueAs(Test.class));
            }
        }
        return result;
    }
}
你可以这样做

String jsonStr ="{\"test\": [\"5\",{ \"data\": \"someData\", \"number\": \"9\"}, 
                                   { \"data\": \"someData\",\"number\": \"10\"}]}";
JSONObject jsonObject =new JSONObject(jsonStr);
String jsonArr = jsonObject.get("test").toString();
JSONArray jsonArray = new JSONArray(jsonArr);
for(int i =1 ;i<jsonArray.length();i++){
    JSONObject object = new JSONObject(jsonArray.get(i).toString());
    System.out.println(object.get("data")); // use setter instead
    System.out.println(object.get("number"));  // use setter instead

}
String jsonStr=“{\'test\':[\'5\',{\'data\':\'someData\',\'number\':\'9\'”,
{\'data\':\'someData\',\'number\':\'10\'}];
JSONObject JSONObject=新的JSONObject(jsonStr);
字符串jsonArr=jsonObject.get(“test”).toString();
JSONArray JSONArray=新JSONArray(jsonArr);
对于(inti=1;我认为这可能会有所帮助:“test”是一个由3个元素组成的数组。读取数组并跳过元素0。不难。
@JsonDeserialize(using = TestListDeserializer.class)
private List<Test> test;
String jsonStr ="{\"test\": [\"5\",{ \"data\": \"someData\", \"number\": \"9\"}, 
                                   { \"data\": \"someData\",\"number\": \"10\"}]}";
JSONObject jsonObject =new JSONObject(jsonStr);
String jsonArr = jsonObject.get("test").toString();
JSONArray jsonArray = new JSONArray(jsonArr);
for(int i =1 ;i<jsonArray.length();i++){
    JSONObject object = new JSONObject(jsonArray.get(i).toString());
    System.out.println(object.get("data")); // use setter instead
    System.out.println(object.get("number"));  // use setter instead

}