Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.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
将JSON映射到简单Java子类_Java_Android_Json_Jackson_Gson - Fatal编程技术网

将JSON映射到简单Java子类

将JSON映射到简单Java子类,java,android,json,jackson,gson,Java,Android,Json,Jackson,Gson,我正在尝试从Android中的默认Json API转移到GSON(或Jackson)。但我一直在尝试将JSONObject转换为Java对象。我读了很多教程,但没有发现任何有用的东西 我有两个类(它们只是为了简单起见): 我试图映射到Dog类的JSON如下: { "id" : "1", "Name" : "Fluffy" } 我正在使用以下代码: Gson gson = new Gson(); Dog dog = gson.fromJson(jsonObject.toString(

我正在尝试从Android中的默认Json API转移到GSON(或Jackson)。但我一直在尝试将JSONObject转换为Java对象。我读了很多教程,但没有发现任何有用的东西

我有两个类(它们只是为了简单起见):

我试图映射到
Dog类的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()返回的内容。是否匹配实际的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]"
    }

}

尝试调用super();在您的Dog构造函数中,确保:
jsonObject.toString()
返回的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]"
    }

}