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

时间:2012-04-25 02:09:53

标签: java json jackson

我想将以下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").

我听说过杰克逊,但我不确定如何使用它来适应我所拥有的json字符串,因为它不仅仅是关键值对,因为涉及“mymusic”列表。我怎么能用杰克逊来完成这个呢?或者如果杰克逊不是最好的话,我能有一些更容易的方法吗?

5 个答案:

答案 0 :(得分:99)

无需为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);

答案 1 :(得分:16)

查看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源代码,这可能会让您在执行数组时变得更复杂一些。

答案 2 :(得分:4)

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); 

答案 3 :(得分:1)

Gson也很有用:http://code.google.com/p/google-gson/

” Gson是一个Java库,可用于将Java对象转换为其JSON表示。它还可用于将JSON字符串转换为等效的Java对象。 Gson可以处理任意Java对象,包括您没有源代码的预先存在的对象。 “

检查API示例:https://sites.google.com/site/gson/gson-user-guide#TOC-Overview 更多示例:http://www.mkyong.com/java/how-do-convert-java-object-to-from-json-format-gson-api/

答案 4 :(得分:0)

Underscore-java 可以将 json 转换为 Object。

    String jsonString = "{\n" +
            "        \"libraryname\":\"My Library\",\n" +
            "                \"mymusic\":[{\"Artist Name\":\"Aaron\",\"Song Name\":\"Beautiful\"},\n" +
            "        {\"Artist Name\":\"Britney\",\"Song Name\":\"Oops I did It Again\"},\n" +
            "        {\"Artist Name\":\"Britney\",\"Song Name\":\"Stronger\"}]}";
    Map<String, Object> jsonObject = U.fromJsonMap(jsonString);
    System.out.println(jsonObject);

// {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}]}

    System.out.println(U.<String>get(jsonObject, "mymusic[0].Artist Name"));
// Aaron