Android 中解析 JSON

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 中解析 JSON相关的知识,希望对你有一定的参考价值。

参考技术A

JSON( javascript Object Notation ) 是一种轻量级的数据交换格式。易于阅读和编写,同时也易于机器解析和生成。

JSON 建构于两种结构:

JSON 具有以下这些格式:

参考: Android 中 解析 JSON

android 提供类四种不同的类来操作 JSON 数据。这些类是 JSONArray、JSONObject、JSONStringer 和 JSONTokenizer

为了解析 JSON 对象,须先创建一个 JSONObject 类的对象,需要传入需解析的字符串 JSONObject root = new JSONObject(candyJson); 然后根据 JSONObject 对象提供方法以及数据类型解析对应 json 数据。下表展示一些 JSONObiect 提供的方法

示例:

Android - Jackson JSON 解析器在“发布”版本中返回空值

【中文标题】Android - Jackson JSON 解析器在“发布”版本中返回空值【英文标题】:Android - Jackson JSON parser returns null value in 'release' builds 【发布时间】:2017-06-28 23:17:22 【问题描述】:

我在我的 Android 应用程序中使用 Jackson JSON 库从 REST API 解析 JSON。除了我使用ObjectMapper.readValueObjectMapper.treeToValue 将JSON 反序列化为对象的几个实例之外,一切都运行良好。每次运行“调试”构建变体时它都能正常工作,但在运行“发布”构建时,它无法创建对象,而是返回 null。

我已经阅读了很多关于确保正确配置 Proguard 设置的内容,但我没有使用 Proguard 并且已删除我的应用程序中对 Proguard 的所有引用。是否还有其他可能导致“发布”版本出现问题的原因?

乔纳森

【问题讨论】:

【参考方案1】:

这是我发现的唯一一篇描述我经历过的类似情况的帖子,但就我而言,没有内部类。 事实证明,这是由于某些字段是包私有的。 在调试版本中一切正常,但在发布版本中,这些字段为空。 将它们更改为公开,并且效果很好。为所有人设置 getter/setter 可能也可以,但我没有尝试。

【讨论】:

【参考方案2】:

原来问题是由于我用来反序列化 JSON 的类是在我的活动类中声明的,因此是一个内部类。我读到内部类可以与 Jackson ObjectMapper 一起使用,只要它们被声明为静态的,所以不完全确定为什么它不能在“发布”模式下工作。一旦我把它变成了一个普通的公共课程,一切都很好。

【讨论】:

伙计,我整天都在为此挠头,然后发现了这个,谢谢!

以上是关于Android 中解析 JSON的主要内容,如果未能解决你的问题,请参考以下文章

如何在json android中返回多行并将其传递给sqlite

从没有异步任务的 JSON android 加载位图

从 JSON Android 获取 Int 值

如何在 Rails for Android 中使用 gzip 压缩 JSON?

将xml转换为json android

android中XML文件是如何解析成View