如何将 Json 翻译成 POJO
How to translate the Json in to POJO
我有以下 JSON 我需要能够在 POJO 中呈现,我怎么能
这样做吗?
JSON每天有一个键,每个键的值是两个独立的逻辑数组,我使用的是 Jackson 库。
{
"2014/01/02": [
{"ABC": 2.25, "XYZ": 4.05},
{"amazon.com": 3}
],
"2014/01/03": [
{"ABC": 13.02},
{"amazon.com": 3}
]
}
{
"2014/01/02": [
{"ABC": 2.25, "XYZ": 4.05},
{}
],
"2014/01/03": [
{"ABC": 13.02},
{"amazon.com": 3}
]
}
This is even JSON, but not useful. I would make JSON for this like below.
{
[
{date: '2014/01/01',data:[{abc: 13.02, "amazonCom": 3},{abc: 13.02, "amazonCom": 3}},
{date: '2014/01/02',data:[{abc: 13.02, "amazonCom": 3},{abc: 13.02, "amazonCom": 3}},
]
}
Java
public jsonObj {
private String date;
private List<DateData> data;
.... setter//getter
}
public class DateData {
private double abc;
private int amazoneCom;
//constructor and getter/setter
}
You can use JSON libraries like below.
1. Jackson - http://jackson.codehaus.org/
2. Gson - https://code.google.com/p/google-gson/
Those libraries helps you to convert json into Java Object and vise versa as well.
Hope it can help you with solving your problem.
你没有太多选择。那是一个丑陋的样子 JSON。没有统一的格式,哪里可以创建POJO。
你需要考虑的事情。这个 {}
是一个 JSON 对象。我 Java 映射术语,它可以映射到 POJO,或者 Map
。为了映射到 POJO,您需要通用 属性 名称和格式,但您似乎没有。这一切似乎都在变化。所以你可能需要使用一个Map
。这是我的看法
{ // Start Map
"2014/01/02": [ // Map key: start Array ( List<Map> )
{"ABC": 2.25, "XYZ": 4.05}, // Start another Map
{"amazon.com": 3} // another Map
您可以使用 @JsonAnySetter
来简化,使用 POJO 包装器,但最终您仍然会有一个 Map<String, List<Map<String, Object>>
,正如我在评论中指出的那样。如果您想要 POJO,则需要一些通用格式。
下面是实现它的一种方法的示例
POJO
public class Dynamic {
private Map<String, Object> map = new HashMap<>();
public Object get(String key) {
return map.get(key);
}
public Map<String, Object> getMap() {
return map;
}
@JsonAnySetter
public void set(String name, Object value) {
map.put(name, value);
}
}
测试(使用 simple.json 文件中的确切 JSON)
public class Test {
public static void main(String[] args) throws Exception {
ObjectMapper mapper = new ObjectMapper();
Dynamic dynamic = mapper.readValue(new File("simple.json"), Dynamic.class);
for (String key : dynamic.getMap().keySet()) {
System.out.println("key: " + key);
System.out.println("--------");
List<Map<String, Object>> list = (List<Map<String, Object>>) dynamic.get(key);
for (Map<String, Object> map : list) {
for (Map.Entry<String, Object> entry: map.entrySet()) {
System.out.println("key: " + entry.getKey() + ", value: " + entry.getValue());
}
}
System.out.println("========");
}
}
}
结果
key: 2014/01/03
--------
key: ABC, value: 13.02
key: amazon.com, value: 3
========
key: 2014/01/02
--------
key: ABC, value: 2.25
key: XYZ, value: 4.05
key: amazon.com, value: 3
========
有很多方法可以将json转换为pojo。在这里,我分享一些 URL 来实现相同的
- Google Gson 教程:将 Java 对象转换为/自 JSON http://howtodoinjava.com/2014/06/17/google-gson-tutorial-convert-java-object-to-from-json/
- 从 JSON 或 JSON-Schema 生成普通旧 Java 对象。 http://www.jsonschema2pojo.org/
我有以下 JSON 我需要能够在 POJO 中呈现,我怎么能 这样做吗?
JSON每天有一个键,每个键的值是两个独立的逻辑数组,我使用的是 Jackson 库。
{
"2014/01/02": [
{"ABC": 2.25, "XYZ": 4.05},
{"amazon.com": 3}
],
"2014/01/03": [
{"ABC": 13.02},
{"amazon.com": 3}
]
}
{
"2014/01/02": [
{"ABC": 2.25, "XYZ": 4.05},
{}
],
"2014/01/03": [
{"ABC": 13.02},
{"amazon.com": 3}
]
}
This is even JSON, but not useful. I would make JSON for this like below.
{
[
{date: '2014/01/01',data:[{abc: 13.02, "amazonCom": 3},{abc: 13.02, "amazonCom": 3}},
{date: '2014/01/02',data:[{abc: 13.02, "amazonCom": 3},{abc: 13.02, "amazonCom": 3}},
]
}
Java
public jsonObj {
private String date;
private List<DateData> data;
.... setter//getter
}
public class DateData {
private double abc;
private int amazoneCom;
//constructor and getter/setter
}
You can use JSON libraries like below.
1. Jackson - http://jackson.codehaus.org/
2. Gson - https://code.google.com/p/google-gson/
Those libraries helps you to convert json into Java Object and vise versa as well.
Hope it can help you with solving your problem.
你没有太多选择。那是一个丑陋的样子 JSON。没有统一的格式,哪里可以创建POJO。
你需要考虑的事情。这个 {}
是一个 JSON 对象。我 Java 映射术语,它可以映射到 POJO,或者 Map
。为了映射到 POJO,您需要通用 属性 名称和格式,但您似乎没有。这一切似乎都在变化。所以你可能需要使用一个Map
。这是我的看法
{ // Start Map
"2014/01/02": [ // Map key: start Array ( List<Map> )
{"ABC": 2.25, "XYZ": 4.05}, // Start another Map
{"amazon.com": 3} // another Map
您可以使用 @JsonAnySetter
来简化,使用 POJO 包装器,但最终您仍然会有一个 Map<String, List<Map<String, Object>>
,正如我在评论中指出的那样。如果您想要 POJO,则需要一些通用格式。
下面是实现它的一种方法的示例
POJO
public class Dynamic {
private Map<String, Object> map = new HashMap<>();
public Object get(String key) {
return map.get(key);
}
public Map<String, Object> getMap() {
return map;
}
@JsonAnySetter
public void set(String name, Object value) {
map.put(name, value);
}
}
测试(使用 simple.json 文件中的确切 JSON)
public class Test {
public static void main(String[] args) throws Exception {
ObjectMapper mapper = new ObjectMapper();
Dynamic dynamic = mapper.readValue(new File("simple.json"), Dynamic.class);
for (String key : dynamic.getMap().keySet()) {
System.out.println("key: " + key);
System.out.println("--------");
List<Map<String, Object>> list = (List<Map<String, Object>>) dynamic.get(key);
for (Map<String, Object> map : list) {
for (Map.Entry<String, Object> entry: map.entrySet()) {
System.out.println("key: " + entry.getKey() + ", value: " + entry.getValue());
}
}
System.out.println("========");
}
}
}
结果
key: 2014/01/03
--------
key: ABC, value: 13.02
key: amazon.com, value: 3
========
key: 2014/01/02
--------
key: ABC, value: 2.25
key: XYZ, value: 4.05
key: amazon.com, value: 3
========
有很多方法可以将json转换为pojo。在这里,我分享一些 URL 来实现相同的
- Google Gson 教程:将 Java 对象转换为/自 JSON http://howtodoinjava.com/2014/06/17/google-gson-tutorial-convert-java-object-to-from-json/
- 从 JSON 或 JSON-Schema 生成普通旧 Java 对象。 http://www.jsonschema2pojo.org/