如何将以下json字符串转换为java对象?


70

我想将以下JSON字符串转换为Java对象:

String jsonString = "{
"libraryname":"My Library",
"mymusic":[{"Artist Name":"Aaron","Song Name":"Beautiful"},
{"Artist Name":"Britney","Song Name":"Oops I did It Again"},
{"Artist Name":"Britney","Song Name":"Stronger"}]}"

我的目标是轻松访问它,例如:

(e.g. MyJsonObject myobj = new MyJsonObject(jsonString)
myobj.mymusic[0].id would give me the ID, myobj.libraryname gives me "My Library").

我听说过杰克逊,但是由于涉及“ mymusic”列表,我不知道如何使用它来适应我拥有的json字符串,因为它不仅仅是键值对。如果杰克逊不是最好的选择,我该如何用杰克逊完成?


Answers:


144

为此,无需与GSON一起使用;杰克逊可以做普通的地图/列表:

ObjectMapper mapper = new ObjectMapper();
Map<String,Object> map = mapper.readValue(json, Map.class);

或更方便的JSON树:

JsonNode rootNode = mapper.readTree(json);

顺便说一句,没有理由为什么您不能实际创建Java类并更方便地执行(IMO):

public class Library {
  @JsonProperty("libraryname")
  public String name;

  @JsonProperty("mymusic")
  public List<Song> songs;
}
public class Song {
  @JsonProperty("Artist Name") public String artistName;
  @JsonProperty("Song Name") public String songName;
}

Library lib = mapper.readValue(jsonString, Library.class);

我试图用jackson发送这种类型的json字符串,但它只返回空值,[{"id":62,"name":"projectname1","batchClassId":1283,"batchClassName":"sample_batchclass26","assetCount":0},{"id":8,"name":"projectname_tmp","batchClassId":1283,"batchClassName":"sample_batchclass26","assetCount":0}]
Madura Harshana 2013年

那是JSON数组,因此必须绑定到Java Collection(如List)或数组(可以使用type Object[].class)。或仅用于java.lang.Object(将是类型List)。它将正常工作。
StaxMan 2013年

1
使用此网站将JSON转换为Java POJO jsonschema2pojo.org。您还可以取消选中getter和setter并使用
lombok

您能提供一个直接转换为java对象的示例吗(在您已经以注释形式指定之后)
Dhruv Singhal

26

查看Google的Gson:http//code.google.com/p/google-gson/

从他们的网站:

Gson gson = new Gson(); // Or use new GsonBuilder().create();
MyType target2 = gson.fromJson(json, MyType.class); // deserializes json into target2

您只需要使用json字符串中的所有字段制作一个MyType类(当然,就重命名了)。在处理数组时,它可能会变得有些复杂,如果您希望手动进行所有解析(也很容易),请访问http://www.json.org/并下载Json的Java源代码解析器对象。


9
Gson gson = new Gson();
JsonParser parser = new JsonParser();
JsonObject object = (JsonObject) parser.parse(response);// response will be the json String
YourPojo emp = gson.fromJson(object, YourPojo.class); 

请添加一些描述来解释代码。谢谢!
失败的科学家

1
JsonParser被描述!
H.Karatsanov

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.