我想映射这个JSON数据:
{"information":{
"type": "typeA",
"date": "2018-01-15 12:11:53",
"user":{
"name": "John"
"lastName": "Doe"
}
}}
对于此java对象:
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonInclude(JsonInclude.Include.NON_NULL)
public class InformationModel {
private String name;
private String lastName;
private String type;
private String date;
}
但是它失败了,所有的值都是null
。我尝试在type
变量上方添加@JsonProperty("information.type")
,但没有成功。
是否可以反序列化JSON,使其仅映射到(这个)一个类?
编辑:我使用Spring StreamListener进行如下映射:
@StreamListener(value = Sink.INPUT)
public void on(InformationModel message) throws IOException {
// some code using message
}
您可以使用Gson。这里有一个很好的教程,您可以利用自定义序列化。
如果您想使用当前的POJO结构,请遵循以下步骤:反序列化json的代码
GsonBuilder gsonBuilder = new GsonBuilder();
JsonDeserializer<UserDate> deserializer = InformationModelDeserializer() ;
// implementation detail
gsonBuilder.registerTypeAdapter(InformationModel .class, deserializer);
Gson customGson = gsonBuilder.create();
InformationModel customObject = customGson.fromJson(yourJson, InformationModel .class);
InformationModelDeserializer的代码。Java语言
public class InformationModelDeserializer implements JsonDeserializer<InformationModel > {
@Override
public InformationModel deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
//intercept the json to convert it to your desired shape
JsonObject jsonObject = json.getAsJsonObject();
JsonObject userJsonObject json.getAsJsonObject("user")
return new InformationModel (
userJsonObject.get("name").getAsString(),
userJsonObject.get("lastname").getAsString(),
jsonObject.get("type").getAsString(),
jsonObject.get("date").getAsString(),
);
}
}
最后把这个@anotaion放在你的InformationModel类@JsonAdapter(InformationModelDeserialize.class)
之前
或者轻松地将POJO更改为
Information.java
public class Information {
private String type;
private String date;
private User user;
//.....
}
使用者Java语言
public class User {
private String name;
private String lastName;
// .....
}
并且很容易意识到:
Information info=new Gson().fromJson(yourJson,Information.class);
我们有几种方法来解决这个问题。如本文所述。我曾尝试使用带注释的映射,但它对我不起作用。工作的是JsonNode,如下所述。
1 InformationModel.java
`@JsonIgnoreProperties(ignoreUnknown = true)
@JsonInclude(JsonInclude.Include.NON_NULL)
public class InformationModel {
private String type;
private String date;
private String lastName;
private String name;
//getters and setters
}
`
[2] 测试演示。Java语言
public class TestDemo {
public static void main(String args[]) throws JsonParseException,
JsonMappingException, IOException {
ObjectMapper mapper = new ObjectMapper();
JsonNode j = mapper.readTree(new File("information.json"));
InformationModel m = new InformationModel();
m.setType(j.get("information").get("type").textValue());
m.setDate(j.get("information").get("date").textValue());
m.setName(j.get("information").get("user").get("name").textValue());
m.setLastName(j.get("information").get("user").get("lastName").textValue());
mapper.writeValue(new File("outputfile.json"), j);
}
}
我必须承认,我对Spring了解不多,所以我的回答可能有点离谱,但既然你用java标记了你的问题,下面是我的答案(使用org.json):
String jsonString = "{\"information\":{\"type\": \"typeA\",\"date\": \"2018-01-15 12:11:53\",\"user\":{\"name\": \"John\",\"lastName\": \"Doe\"}}}";
JSONObject o = new JSONObject(jsonString);
JSONObject obj = o.getJSONObject("information");
String date = obj.getString("date");
//map whatever you want to map here.
System.out.println(date);
显然这是非常基本的,但你明白了。您可能可以使用JSONArray实现同样的事情。
希望有帮助!
POJO类: 控制器: JSON请求: 问题: 当我处理请求时,我收到一个空的TransactionDto对象。 System.out.println(transactionDto) TransactionDto(id=null,userName=null,apiKey=null,amount=0,accountNumber=null,expirationDate=null,cscCode=nul
有没有什么方法可以将嵌套的JSON值映射到字段而不需要额外的类?我有一个JSON响应 但是在中,我只需要值。因此,我决定创建Kotlin数据类,并尝试使用注释的选项 下面的代码正在工作 我有几个嵌套值,为它们创建额外的类是相当夸张的。还有比为节点创建嵌套类更好的方法吗?
问题内容: 我在了解如何实现这一目标方面遇到了问题。 基本上我们有一个API,用户发送以下格式的JSON :(如果代码不完美,请原谅,但您可以理解) 好的,我不确定我是否正确设置了JSON格式,但是现在这是我的问题。 我有一个带有参数Name,Last的类,还有一个作为其成员之一的对象Client和Property Date。 像这样: 因此,基本上,我不确定如何获取JSON,然后将其映射到我的对
我有一个restendpoint,它返回3级嵌套json,如下所示: 我有一个java类,没有相同的3个嵌套级别: 当我使用restTemplate拨打rest电话时: jackson甚至没有使用json ignore属性映射字段departName(因为我猜它不在同一嵌套级别)。 如何将这个http json响应映射到忽略嵌套父json的java字段?
这是我的DTO: 这是我的实体: 我想配置我的ModelMapper将Tag#id映射到TagVolumeDTO#idTag。这可能吗?
问题内容: 我们有一张有很多列的大桌子。移至MySQL Cluster后,由于以下原因无法创建表: 错误1118(42000):行大小太大。不包括BLOB在内的已使用表类型的最大行大小为14000。这包括存储开销,请查阅手册。您必须将某些列更改为TEXT或BLOB 举个例子: 这是用于存储配置参数的表。我在想,我们可以将一些列合并为一个列,并将其存储为JSON对象,然后将其转换为Java对象。 例