JSON 使用笔记

本文深入探讨了JSON数据格式的特点,对比XML展示了其优势,并详细介绍了如何在Java中解析和处理JSON数据,包括使用Google Gson库、OrgJson和Jackson等流行工具的方法。此外,文章还提供了常见问题的解决方案,如导入问题、格式化技巧以及如何避免解析错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通俗地来说JSON 数据其实是String类型的数据。

可以通过创建Org 的JSONObject对象,获取一个属性值; 或者通过 Google提供的Gson 插件,转换成对应格式的Java对象 (JavaBean的形式),从而获得所需的数据.

这样就可以把你从网络上或者本地存储到Preference中的数据解析出来,非常方便。

一、JSON 的定义

1. 官网介绍

https://www.json.org/json-en.html

JSON (JavaScript Object Notation) is a lightweight data-interchange format. It is easy for humans to read and write. It is easy for machines to parse and generate.

JSON(JavaScript 对象表示法)是一种轻量级的数据交换格式。人类易于阅读和书写。机器很容易解析和生成。

 

It is based on a subset of the JavaScript Programming Language Standard ECMA-262 3rd Edition - December 1999. JSON is a text format that is completely language independent but uses conventions that are familiar to programmers of the C-family of languages, including C, C++, C#, Java, JavaScript, Perl, Python, and many others. These properties make JSON an ideal data-interchange language.

它基于JavaScript编程语言标准ECMA-262第三版(1999年12月)的子集 。JSON是一种完全独立于语言的文本格式,但是使用C语言家族(包括C,C ++,C#,Java,JavaScript,Perl,Python等)的程序员熟悉的约定。这些属性使JSON成为理想的数据交换语言

 

2. 参考bejson 网站对JSON 的解释:

JSON是一种取代XML的数据结构,和xml相比,它更小巧但描述能力却不差,由于它的小巧所以网络传输数据将减少更多流量从而加快速度。

那么,JSON到底是什么?

JSON就是一串字符串,   只不过元素会使用特定符号标注

  • {} 双括号表示对象
  • [] 中括号表示数组
  • "" 双引号内是属性或值
  • : 冒号表示后者是前者的值(这个值可以是字符串、数字、也可以是另一个数组或对象)

所以 {"name": "Michael"} 可以理解为是一个包含name为Michael的对象

而[{"name": "Michael"},{"name": "Jerry"}]就表示包含两个对象的数组

当然了,你也可以使用{"name":["Michael","Jerry"]}来简化上面一部,这是一个拥有一个name数组的对

 

二、如何解析JSON数据

参考: https://stackoverflow.com/questions/2591098/how-to-parse-json-in-java

1. Google Gson 库

2. Org Json

3. Jackson

据说使用Jackson效率最高 

三、使用问题

1. 无法导入JsonObject

Android studio 中, 在libs 加入gson-2.3.1

2.  Json 格式化及转换成JavaBean 在线网站

https://www.bejson.com/json2javapojo/

3. 解析Json数据 (转换成Java对象时)报错

: IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY

AndroidRuntime: Caused by: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path $

解决方案参考(相对靠谱):

https://stackoverflow.com/questions/9598707/gson-throwing-expected-begin-object-but-was-begin-array

部分内容如下:

https://github.com/google/gson/blob/master/UserGuide.md

This will work:

ChannelSearchEnum[] enums = gson.fromJson(yourJson, ChannelSearchEnum[].class);

But this is better:

Type collectionType = new TypeToken<Collection<ChannelSearchEnum>>(){}.getType();
Collection<ChannelSearchEnum> enums = gson.fromJson(yourJson, collectionType);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值