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
}