Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jackson 如何展开单个项目数组并将值字段提取到一个简单字段中?_Jackson_Gson - Fatal编程技术网

Jackson 如何展开单个项目数组并将值字段提取到一个简单字段中?

Jackson 如何展开单个项目数组并将值字段提取到一个简单字段中?,jackson,gson,Jackson,Gson,我有一个类似于以下内容的JSON文档: { "aaa": [ { "value": "wewfewfew" } ], "bbb": [ { "value": "wefwefw" } ] } 我需要将其反序列化为更干净的内容,例如: public class MyEntity{ private String aaa; private String bbb; } 反序列化时,打开每个数组并提取“值”字段的最佳方法是什

我有一个类似于以下内容的JSON文档:

{
  "aaa": [
    {
      "value": "wewfewfew"
    }
  ],
  "bbb": [
    {
      "value": "wefwefw"
    }
  ]
}
我需要将其反序列化为更干净的内容,例如:

public class MyEntity{
  private String aaa;
  private String bbb;
}

反序列化时,打开每个数组并提取“值”字段的最佳方法是什么?只是定制的?还是有更好的方法?

使用Gson的快速解决方案是使用
JsonDeserializer
如下:

package stackoverflow.questions.q17853533;

import java.lang.reflect.Type;

import com.google.gson.*;

public class MyEntityDeserializer implements JsonDeserializer<MyEntity> {
    public MyEntity deserialize(JsonElement json, Type typeOfT,
        JsonDeserializationContext context) throws JsonParseException {

    String aaa = json.getAsJsonObject().getAsJsonArray("aaa").get(0)
        .getAsJsonObject().get("value").getAsString();
    String bbb = json.getAsJsonObject().getAsJsonArray("bbb").get(0)
        .getAsJsonObject().get("value").getAsString();

    return new MyEntity(aaa, bbb);
    }
}

为完整起见,如果使用jackson,可以启用反序列化功能
展开单个值数组
。 为此,必须为
ObjectMapper
启用它,如下所示:

ObjectMapper objMapper=new ObjectMapper()
.enable(反序列化功能。展开单个值数组);
有了这些,你就可以像在杰克逊一样阅读课堂了。 例如,假设类

公共类人物{
私有字符串名称;
//假设getter、setter等人。
}
还有一个json
personJson

{
“姓名”:[
“无名氏”
]
}
我们可以通过以下方式对其进行反序列化:

ObjectMapper objMapper=new ObjectMapper()
.enable(反序列化功能。展开单个值数组);
Person p=objMapper.readValue(personJson,Person.class);

您可以使用自定义反序列化程序。
package stackoverflow.questions.q17853533;

import com.google.gson.*;

public class Q17853533 {


  public static void main(String[] arg) {
    GsonBuilder builder = new GsonBuilder();
    builder.registerTypeAdapter(MyEntity.class, new MyEntityDeserializer());

    String testString = "{        \"aaa\": [{\"value\": \"wewfewfew\"  } ],  \"bbb\": [  {\"value\": \"wefwefw\" } ]    }";


    Gson gson = builder.create();
    MyEntity entity= gson.fromJson(testString, MyEntity.class);
    System.out.println(entity);
  }

}