103

我想将以下 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”列表。我如何与杰克逊一起完成此任务,或者如果杰克逊不是最适合此任务的人,我是否有更简单的方法可以完成此任务?

4

5 回答 5

196

无需为此使用 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);
于 2012-04-25T21:22:57.147 回答
37

查看 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 源代码解析器对象。

于 2012-04-25T02:19:12.020 回答
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); 
于 2018-07-25T13:25:19.917 回答
3

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/

于 2012-04-25T02:18:39.743 回答
0

Underscore-java我是它的开发者)可以将 json 转换为 Object。

import com.github.underscore.U;

    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
于 2022-02-07T10:57:08.507 回答