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

2022-08-31 09:08:51

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

我听说过Jackson,但我不确定如何使用它来适应我拥有的json字符串,因为它不仅仅是键值对,因为它涉及“mymusic”列表。我怎样才能和杰克逊一起做到这一点,或者如果杰克逊不是最好的,有没有一些更简单的方法可以做到这一点?


答案 1

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

答案 2

查看谷歌的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

您只需要创建一个MyType类(当然是重命名的),其中包含json字符串中的所有字段。当您执行数组时,它可能会变得更加复杂,如果您更喜欢手动执行所有解析(也非常简单),请查看 http://www.json.org/ 并下载Json解析器对象的Java源代码。