像Java中的其他语言一样阅读JSON

时间:2018-02-28 11:22:44

标签: java json

我知道有很多JSON解析库。 但经过一些搜索,我似乎找不到一种简单的方法来解析java中的json数据。

我知道最好的做法是拥有一个合适的模型,以便api请求直接映射到一个对象。

但是我想说我有一个JSONObject:

JSONObject c = contacts.getJSONObject(i);

String id = c.getString("id");
String name = c.getString("name");
String email = c.getString("email");
String address = c.getString("address");
String gender = c.getString("gender");

我以前使用以下语法来获取数据:

contacts["id]
contacts["name"]

我个人更喜欢使用后者的可读性,特别是当你开始进入嵌套数据时,例如:

articleItem["_embedded"]["wp:featuredmedia"][0]["media_details"]["sizes"]["medium"]["source_url"]

在我看来,获取这些数据的java代码真的很难看。

b = a.getJSONObject("_embedded")
c = b.getJSONObject("wp:fea....")
d = c.get(0)
e = d.getJSONObject("media..details")
f = e.getJSONObject("sizes")
g = f.getJSONObject("medium")
h = ............

是一种在java中做一个衬里json的方法吗?

3 个答案:

答案 0 :(得分:1)

quicktype将直接从JSON示例数据生成您的类和转换器;您可能会认为这是“像其他语言一样阅读JSON”,因为您只需获得一个POJO实例,就可以像以下一样访问它:

git fetch origin v1:v1 v2:v2

我认为你的JSON就像:

ArticleItem item = Converter.fromJsonString(jsonString);
String url = item.getEmbedded().getWpFeaturedmedia()[0]
    .getMediaDetails().getSizes()
    .getMedium().getSourceUrl();

以下是quicktype generated

的完整代码
{
  "_embedded": {
    "wp:featuredmedia": [
      {
        "media_details": {
          "sizes": {
            "medium": {
              "source_url": "https://quicktype.io"
            }
          }
        }
      }
    ]
  }
}

答案 1 :(得分:0)

您可以使用ObjectMapper将Json转换为Java对象,这将使您根据使用情况使用或解析数据。

https://www.mkyong.com/java/how-to-convert-java-object-to-from-json-jackson/

答案 2 :(得分:0)

在Java中读取json对象是不可能的,就好像它是另一种语言,即javascript。

唯一的方法是将json转换为Java模型对象,然后通过Java东西访问它。

使用 Google gson https://github.com/google/gson)非常简单。

在您的情况下,您必须实现与处理过的json相关的所有类并启动:

Gson gson = new Gson();
Contact contact = gson.fromJson(jsonfile)

很明显,您还必须实现所有嵌套的Contact类,即Embedded类:

public class Contact {
.....
Embedded _embedded;
....
}