将 JSON 映射到简单的 Java 子类
Mapping JSON to simple Java subclass
我正在尝试从 Android 中的默认 Json API 移动到 GSON(或 Jackson)。但我坚持尝试将 JSONObject 转换为 Java 对象。我已经阅读了很多教程,但没有找到任何帮助。
我有这两个类(这些只是为了简单起见):
public class Animal {
@SerializedName("id")
private int id;
//getters and setters
}
public class Dog extends Animal{
@SerializedName("Name")
private String name;
//getters and setters
}
我试图映射到 Dog class
的 JSON 是这样的:
{
"id" : "1",
"Name" : "Fluffy"
}
我正在使用此代码:
Gson gson = new Gson();
Dog dog = gson.fromJson(jsonObject.toString(), Dog.class);
Name
映射正常,但 id
不是。
如果更简单,我如何使用 GSON(或 Jackson)库实现此目的?
对于 Jackson,我使用此代码
private static ObjectMapper configMapper() {
ObjectMapper mapper = new ObjectMapper();
mapper.setVisibilityChecker(mapper.getSerializationConfig().getDefaultVisibilityChecker()
.withFieldVisibility(JsonAutoDetect.Visibility.PUBLIC_ONLY)
.withGetterVisibility(JsonAutoDetect.Visibility.PUBLIC_ONLY)
.withSetterVisibility(JsonAutoDetect.Visibility.PUBLIC_ONLY)
.withCreatorVisibility(JsonAutoDetect.Visibility.PUBLIC_ONLY));
mapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
return mapper;
}
private Dog readDog(String json) {
Dog ret = null;
if (json != null) {
ObjectMapper mapper = configMapper();
try {
ret = mapper.readValue(json, Dog.class);
} catch (Exception e) {
Log.e("tag", Log.getStackTraceString(e));
return null;
}
}
return ret;
}
希望它也对你有用。
您的代码应该可以正常工作。尝试检查 jsonObject.toString()
returns。是否与实际的 json 匹配。例子
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import com.google.gson.Gson;
import com.google.gson.annotations.SerializedName;
class Animal {
private int id;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Override
public String toString() {
return "Animal [id=" + id + "]";
}
}
class Dog extends Animal{
@SerializedName("Name")
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Dog [name=" + name + ", Id=" + getId() + "]";
}
}
public class GSonParser {
public static void main(String[] args) throws Exception {
String json = "{\"id\" : \"1\", \"Name\" : \"Fluffy\"}";
JSONParser parser = new JSONParser();
JSONObject jsonObject = (JSONObject) parser.parse(json);
Gson gson = new Gson();
Dog dog = gson.fromJson(jsonObject.toString(), Dog.class);
System.out.println(dog); // Prints "Dog [name=Fluffy, Id=1]"
}
}
我正在尝试从 Android 中的默认 Json API 移动到 GSON(或 Jackson)。但我坚持尝试将 JSONObject 转换为 Java 对象。我已经阅读了很多教程,但没有找到任何帮助。
我有这两个类(这些只是为了简单起见):
public class Animal {
@SerializedName("id")
private int id;
//getters and setters
}
public class Dog extends Animal{
@SerializedName("Name")
private String name;
//getters and setters
}
我试图映射到 Dog class
的 JSON 是这样的:
{
"id" : "1",
"Name" : "Fluffy"
}
我正在使用此代码:
Gson gson = new Gson();
Dog dog = gson.fromJson(jsonObject.toString(), Dog.class);
Name
映射正常,但 id
不是。
如果更简单,我如何使用 GSON(或 Jackson)库实现此目的?
对于 Jackson,我使用此代码
private static ObjectMapper configMapper() {
ObjectMapper mapper = new ObjectMapper();
mapper.setVisibilityChecker(mapper.getSerializationConfig().getDefaultVisibilityChecker()
.withFieldVisibility(JsonAutoDetect.Visibility.PUBLIC_ONLY)
.withGetterVisibility(JsonAutoDetect.Visibility.PUBLIC_ONLY)
.withSetterVisibility(JsonAutoDetect.Visibility.PUBLIC_ONLY)
.withCreatorVisibility(JsonAutoDetect.Visibility.PUBLIC_ONLY));
mapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
return mapper;
}
private Dog readDog(String json) {
Dog ret = null;
if (json != null) {
ObjectMapper mapper = configMapper();
try {
ret = mapper.readValue(json, Dog.class);
} catch (Exception e) {
Log.e("tag", Log.getStackTraceString(e));
return null;
}
}
return ret;
}
希望它也对你有用。
您的代码应该可以正常工作。尝试检查 jsonObject.toString()
returns。是否与实际的 json 匹配。例子
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import com.google.gson.Gson;
import com.google.gson.annotations.SerializedName;
class Animal {
private int id;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Override
public String toString() {
return "Animal [id=" + id + "]";
}
}
class Dog extends Animal{
@SerializedName("Name")
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Dog [name=" + name + ", Id=" + getId() + "]";
}
}
public class GSonParser {
public static void main(String[] args) throws Exception {
String json = "{\"id\" : \"1\", \"Name\" : \"Fluffy\"}";
JSONParser parser = new JSONParser();
JSONObject jsonObject = (JSONObject) parser.parse(json);
Gson gson = new Gson();
Dog dog = gson.fromJson(jsonObject.toString(), Dog.class);
System.out.println(dog); // Prints "Dog [name=Fluffy, Id=1]"
}
}