当前位置: 首页 > 知识库问答 >
问题:

寻找一种不太冗长的方式来解析Android(Java)中的JSON

封梓
2023-03-14

我正在编写一个使用JSON(来自Kimonolabs API)的应用程序,虽然我能够轻松地在Python中使用我的API:

results = json.loads(urllib.request.urlopen(KimonoAPIlink).read().decode('utf-8'))

它返回一个可用的JSON字典:

title = results['results']['suart'][0]['stitle']['text']
href = results['results']['suart'][0]['stitle']['href']

在Java(特别是Android)中,我必须这样做(使用Gson):

URL url = new URL(KimonoAPIlink);
HttpURLConnection request = (HttpURLConnection) url.openConnection();
request.connect();
JsonParser jp = new JsonParser(); //from gson
JsonElement root = jp.parse(new InputStreamReader((InputStream) request.getContent()));
JsonObject rootobj = root.getAsJsonObject(); //May be an array, may be an object.
JsonElement x = rootobj.getAsJsonObject("results").getAsJsonArray("suart").get(0);
JsonObject y = x.getAsJsonObject();
title.setText(y.getAsJsonObject("stitle").getAsJsonPrimitive("text").toString().replace("\"", "").replace("\\","\""));

有没有什么方法可以做到这一点,而不是那么冗长和复杂?(我的代码可以工作,我只是希望它更简单和干净)

此外,我是否可以以某种方式将整个嵌套JSON对象解析成有用的东西(就像python那样),而不重新解析我访问的每个层?

提前感谢。

编辑:我也看到人们使用Apache commons。io在这里,但我认为它不会返回不同的JSON对象(即,我仍然必须解析每个层)

共有2个答案

穆鸿卓
2023-03-14

您正在寻找的是使用JsonPath进行查找,其中JSON坐标由一个字符串表示,该字符串的语法与您在Python中使用的语法非常相似(以及其他特性)。

例如,在您的例子中,它将是$.results.suart[o].stitle.text

快速浏览一下文档和 gson github,就会发现它不是在 gson 中实现的,尽管 JsonReader 类确实支持返回该值的方法

java中有一个库实现JsonPath(称为JsonPath)。这是您案例的一行代码(忽略连接细节):

String result = JsonPath.parse("[some json]").read("$.results.suart[o].stitle.text");
沈树
2023-03-14

查看GSON,杰克逊或莫希

 类似资料:
  • 本文向大家介绍Android XML数据的三种解析方式,包括了Android XML数据的三种解析方式的使用技巧和注意事项,需要的朋友参考一下 本篇文章包含以下内容:      XML数据的Dom解析      XML数据的Sax解析      XML数据的Pull解析      Activity中使用三种解析      Sax解析与Pull解析区别 三种解析方式的步骤: 1.在Assets文件夹

  • 本文向大家介绍Android解析XML的三种方式SAX、Pull、Dom,包括了Android解析XML的三种方式SAX、Pull、Dom的使用技巧和注意事项,需要的朋友参考一下 在android开发中,经常用到去解析xml文件,常见的解析xml的方式有一下三种:SAX、Pull、Dom解析方式。最近做了一个android版的CSDN阅读器,用到了其中的两种(sax,pull),本文对androi

  • 问题内容: 我已经在R中编写了以下代码以开始使用数据请求API。这是一个普通的Web服务JSON API。 基本上,它使用httr初始化了URL的获取请求,然后通过fromJSON将生成的JSON数据转换为R结构。JSON请求如下所示: 确实,我的代码像我希望的那样将数据放入了data.frame中,但是它非常冗长,我拒绝相信所有这些行对于实现所需结果都是必需的。所需的结果是mydf data.f

  • 问题内容: 我正在学习RxJava,并且在很多地方看到可以通过这种方式处理错误: 我是唯一认为这确实是错误代码的人吗?我该如何做得更好?我虽然使用了“访问”我的基本异常的每种具体类型的模式,但是方法始终需要一个;。您不能使用自己的基本异常。 问题答案: 错误处理程序: 您可以这样使用:

  • 但是,我发现这个json体太冗长了。 我如何指定我只需要错误描述消息或类似的东西?有灵巧/纤细的结构吗?

  • 本文向大家介绍详解Java解析XML的四种方法,包括了详解Java解析XML的四种方法的使用技巧和注意事项,需要的朋友参考一下 XML现在已经成为一种通用的数据交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成与交互带来了极大的方便。对于XML本身的语法知识与技术细节,需要阅读相关的技术文献,这里面包括的内容有DOM(Document Object Model),DTD(Document