如何将JSON转换为Java对象

如何将JSON转换为Java对象,java,json,jackson,Java,Json,Jackson,我正在使用Jackson ObjectMapper 我有下面的JSON和Java类。我有个例外。有人能告诉我我的Java类出了什么问题吗 JSON: Java类: AnyJsonObject.java: public class AnyJsonObject { private List<Name> name; public List<Name> getName() { return name; } public void

我正在使用Jackson ObjectMapper 我有下面的JSON和Java类。我有个例外。有人能告诉我我的Java类出了什么问题吗

JSON:

Java类: AnyJsonObject.java:

public class AnyJsonObject {
    private List<Name> name;

    public List<Name> getName() {
        return name;
    }

    public void setName(List<Name> name) {
        this.name = name;
    }
}
代码:


我得到java.lang.Exception:在
AnyJsonObject类中反序列化json时出错,您有以下几行代码:

private List<Name> name;

// wrong place here
public Name getName() {
    return name;
}
编辑:

我已经修改了您的源代码并使用了
jackson2
lib。以下是我对这项任务的执行情况:

下面是
类名

import com.fasterxml.jackson.annotation.JsonProperty;

public class Name {

    @JsonProperty("field1")
    public String fieldOne;

    @JsonIgnore
    public String field2; // this field will be ignored

    @Override
    public String toString() {
        return "field1: " + fieldOne + ", field2: " + field2;
    }
} 
下面是
AnyJsonObject类

import java.util.List;

public class AnyJsonObject {
    private List<Name> name;

    public List<Name> getName() {
        return name;
    }

    public void setName(List<Name> name) {
        this.name = name;
    }

    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        for (Name n : name) sb.append(n.toString());

        return sb.toString();
    }
}
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;

public class Test {

    public static void main(String[] args) {
        String json = "{\"name\":\n" +
                "    [\n" +
                "        {\n" +
                "            \"field1\":\"value1\",\n" +
                "            \"field2\":\"value2\"\n" +
                "        },\n" +
                "        {\n" +
                "            \"field1\":\"value1\",\n" +
                "            \"field2\":\"value2\"\n" +
                "        },\n" +
                "        {\n" +
                "            \"field1\":\"value1\",\n" +
                "            \"field2\":\"value2\"\n" +
                "        }\n" +
                "    ]\n" +
                "}";

        ObjectMapper mapper = new ObjectMapper();

        try {
            AnyJsonObject any = mapper.readValue(json, AnyJsonObject.class);
            System.out.println(any);

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
执行输出:

字段1:value1,字段2:value2field1:value1,字段2:value2field1:value1,字段2:value2


作为替代方案,建议使用gson() 它还帮助将json读入Java对象,如:

public List<Class_to_create_json_of> readJsonToObject(String jsonContent) {

    JSONObject json = new JSONObject();
    try {
         json = (JSONObject) new JSONParser().parse(jsonContent);
    } catch (Exception e) {
         handleException(e);
    }
    return gson.fromJson(json.toString(),
                new TypeToken<List<Class_to_create_json_of>>() {}.getType());
}

导入com.fasterxml.jackson.core.JsonProcessingException;导入com.fasterxml.jackson.databind.JavaType;导入com.fasterxml.jackson.databind.JsonNode;导入com.fasterxml.jackson.databind.ObjectMapper;导入com.fasterxml.jackson.databind.node.ArrayNode;公共静态TJSONTOPOJO(字符串jsonData,类beanType){try{Tt=MAPPER.readValue(jsonData,beanType);返回T;}catch(异常e){e.printStackTrace();}返回null;}

删除
请求主机名
,或者将其添加到JSONU类的结构是什么?我已经用银行的类更新了答案。如果我的json字符串有10个字段,而我只想在JavaBean中使用5个字段,那么它就不起作用了。即使我不打算使用Java bean中的所有字段,我也应该包括这些字段吗?添加@JsonIgnore注释以忽略字段
import com.fasterxml.jackson.annotation.JsonProperty;

public class Name {

    @JsonProperty("field1")
    public String fieldOne;

    @JsonIgnore
    public String field2; // this field will be ignored

    @Override
    public String toString() {
        return "field1: " + fieldOne + ", field2: " + field2;
    }
} 
import java.util.List;

public class AnyJsonObject {
    private List<Name> name;

    public List<Name> getName() {
        return name;
    }

    public void setName(List<Name> name) {
        this.name = name;
    }

    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        for (Name n : name) sb.append(n.toString());

        return sb.toString();
    }
}
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;

public class Test {

    public static void main(String[] args) {
        String json = "{\"name\":\n" +
                "    [\n" +
                "        {\n" +
                "            \"field1\":\"value1\",\n" +
                "            \"field2\":\"value2\"\n" +
                "        },\n" +
                "        {\n" +
                "            \"field1\":\"value1\",\n" +
                "            \"field2\":\"value2\"\n" +
                "        },\n" +
                "        {\n" +
                "            \"field1\":\"value1\",\n" +
                "            \"field2\":\"value2\"\n" +
                "        }\n" +
                "    ]\n" +
                "}";

        ObjectMapper mapper = new ObjectMapper();

        try {
            AnyJsonObject any = mapper.readValue(json, AnyJsonObject.class);
            System.out.println(any);

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
public List<Class_to_create_json_of> readJsonToObject(String jsonContent) {

    JSONObject json = new JSONObject();
    try {
         json = (JSONObject) new JSONParser().parse(jsonContent);
    } catch (Exception e) {
         handleException(e);
    }
    return gson.fromJson(json.toString(),
                new TypeToken<List<Class_to_create_json_of>>() {}.getType());
}
{
  "some_key" : "some_velue",
  "some_other_key" : 1,
  "some_third_key" : true
}

public class jsonContent {
   private String some_key;
   private int some_other_key;
   privtae boolean some_third_key;

   public setSome_key(String some_key) {
       this.some_key = some_key;
   }
   public setSome_other_key(int some_other_key) {
      this.some_other_key = some_other_key;
   }
   public setSome_third_key(boolean some_third_key) {
      this.some_third_key = some_third_key;
   }

   public getSome_key() {
       return some_key;
   }
   public getSome_other_key(i) {
      return some_other_key;
   }
   public getSome_third_key() {
      return some_third_key;
   }
}