关于JSON的一些总结

2024-09-07 15:32
文章标签 总结 json

本文主要是介绍关于JSON的一些总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、关于JSON

Json是一种类似于XML的通用数据交换格式,具有比XML更高的传输效率. 从结构上看,所有的数据(data)最终都可以分解成三种类型: 
第一种类型是标量(scalar),也就是一个单独的字符串(string)或数字(numbers),比如"北京"这个单独的词。 
第二种类型是序列(sequence),也就是若干个相关的数据按照一定顺序并列在一起,又叫做数组(array)或列表(List),比如"北京,上海"。 
第三种类型是映射(mapping),也就是一个名/值对(Name/value),即数据有一个名称,还有一个与之相对应的值,这又称作散列(hash)或字典(dictionary),比如"首都:北京"。 
Json的规格非常简单,只用一个页面几百个字就能说清楚,而且Douglas Crockford声称这个规格永远不必升级,因为该规定的都规定了。 
1) 并列的数据之间用逗号(",")分隔。 
2) 映射用冒号(":")表示。 
3) 并列数据的集合(数组)用方括号("[]")表示。 
4) 映射的集合(对象)用大括号("{}")表示。


二、常见的JSON解析方法

解析JSON数据首先要明确,解析的JSON字符串是属于JSONObject还是JSONArray。

android平台上一般有两种解析技术可供选择:android内置的org.json包和google的开源的gson库。

json已经内嵌在了android中,所以在平时的android开发中可以直接使用org.json来直接进行解析,而使用gson需要加入第三方的库文件。


三、对于常见JSON字符串的举例

对于一个JSON字符串,我们首先需要判断它是属于JSONObject还是JSONArray。如果最外层是由[]所包含的,那么它就是一个JSONArray,相当于是一个JSON数组;如果最外层是由{}所包含的,那么它就是一个JSONObject,就是一个JSON对象。

1、json = {"devid":"1234567800","latitude":"29.4963","longitude":"116.189","postime":"2014-06-10 12:13:00"};

这是最常见的映射关系的JSON字符串,而且也只是一个JSON对象,所以使用org.json和gson都很简单,但是一般来说直接使用org.json更为方便。

                JSONObject jsonObject = new JSONObject(json);String devid = jsonObject.getString("devid");String latitude = jsonObject.getString("latitude");String longitude = jsonObject.getString("longitude");String postime = jsonObject.getString("postime");
2、json =  [{"devid":"1234567800","latitude":"29.4963","longitude":"116.189","postime":"2014-06-10 12:13:00"},{"devid":"1234567832","latitude":"29.4943","longitude":"1161.129","postime":"2014-06-11 12:13:00"}];

可以看出这是一个JSONArray,所以只需要在刚才的代码基础上稍加改动就可以了:

                JSONArray jsonArray = new JSONArray(json);for (int i = 0; i < jsonArray.length(); i++) {JSONObject jsonObject = (JSONObject) jsonArray.opt(i);String devid = jsonObject.getString("devid");String latitude = jsonObject.getString("latitude");String longitude = jsonObject.getString("longitude");String postime = jsonObject.getString("postime");}

3、json = {"data":{"2580":"云南省","3219":"台湾省","35":"河北省","219":"山西省","3314":"澳门特别行政区","18":"天津市","1028":"安徽省","926":"浙江省","1692":"湖北省","1809":"湖南省","2726":"西藏自治区","3026":"青海省","1245":"江西省","2482":"贵州省","3078":"宁夏回族自治区","3106":"新疆维吾尔自治区","1150":"福建省","1946":"广东省","580":"吉林省","2925":"甘肃省","2807":"陕西省","2279":"四川省","3292":"香港特别行政区","650":"黑龙江省","2089":"广西壮族自治区","2240":"重庆市","810":"江苏省","351":"内蒙古自治区","792":"上海市","1":"北京市","465":"辽宁省","1357":"山东省","1515":"河南省","2213":"海南省"},"status":{"errorCode":"","errorDesc":"","succeed":"1"}};

通过分析可以看出来,最外层是一个JSONArray,里面有两个JSONObject,分别是data和status,status里面的就是上面第一个json那样的字符串,很容易解析,但是data中的json字符串就不像我们所见过的那样,所以这里对于data里面的数据解析就要使用一种新的方法了:

JSONObject data = connGet.getJSONObject("data");
Map<String,String> result = new HashMap<String, String>();
Iterator it = data.keys();
while (it.hasNext()) { String key = it.next().toString(); String value = data.getString(key);result.put(key, value);
}

通过迭代的方式,将data中的数据不断的读出来,并放入一个Map集合中,最后所得到的Map集合就是一个一个的JSON对了,只需要遍历Map就可以得到结果。


当然也可以使用Gson来进行解析,也是很容易的。

将data中的数据看作是一个Map,然后再遍历Map就行了


这篇关于关于JSON的一些总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1145447

相关文章

Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式

《Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式》本文详细介绍如何使用Java通过JDBC连接MySQL数据库,包括下载驱动、配置Eclipse环境、检测数据库连接等关键步骤,... 目录一、下载驱动包二、放jar包三、检测数据库连接JavaJava 如何使用 JDBC 连接 mys

MySQL查询JSON数组字段包含特定字符串的方法

《MySQL查询JSON数组字段包含特定字符串的方法》在MySQL数据库中,当某个字段存储的是JSON数组,需要查询数组中包含特定字符串的记录时传统的LIKE语句无法直接使用,下面小编就为大家介绍两种... 目录问题背景解决方案对比1. 精确匹配方案(推荐)2. 模糊匹配方案参数化查询示例使用场景建议性能优

JavaSE正则表达式用法总结大全

《JavaSE正则表达式用法总结大全》正则表达式就是由一些特定的字符组成,代表的是一个规则,:本文主要介绍JavaSE正则表达式用法的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录常用的正则表达式匹配符正则表China编程达式常用的类Pattern类Matcher类PatternSynta

解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘问题

《解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘问题》:本文主要介绍解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4... 目录未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘打开pom.XM

SpringBoot排查和解决JSON解析错误(400 Bad Request)的方法

《SpringBoot排查和解决JSON解析错误(400BadRequest)的方法》在开发SpringBootRESTfulAPI时,客户端与服务端的数据交互通常使用JSON格式,然而,JSON... 目录问题背景1. 问题描述2. 错误分析解决方案1. 手动重新输入jsON2. 使用工具清理JSON3.

SQL中JOIN操作的条件使用总结与实践

《SQL中JOIN操作的条件使用总结与实践》在SQL查询中,JOIN操作是多表关联的核心工具,本文将从原理,场景和最佳实践三个方面总结JOIN条件的使用规则,希望可以帮助开发者精准控制查询逻辑... 目录一、ON与WHERE的本质区别二、场景化条件使用规则三、最佳实践建议1.优先使用ON条件2.WHERE用

Springboot3+将ID转为JSON字符串的详细配置方案

《Springboot3+将ID转为JSON字符串的详细配置方案》:本文主要介绍纯后端实现Long/BigIntegerID转为JSON字符串的详细配置方案,s基于SpringBoot3+和Spr... 目录1. 添加依赖2. 全局 Jackson 配置3. 精准控制(可选)4. OpenAPI (Spri

MySQL JSON 查询中的对象与数组技巧及查询示例

《MySQLJSON查询中的对象与数组技巧及查询示例》MySQL中JSON对象和JSON数组查询的详细介绍及带有WHERE条件的查询示例,本文给大家介绍的非常详细,mysqljson查询示例相关知... 目录jsON 对象查询1. JSON_CONTAINS2. JSON_EXTRACT3. JSON_TA

Java中JSON格式反序列化为Map且保证存取顺序一致的问题

《Java中JSON格式反序列化为Map且保证存取顺序一致的问题》:本文主要介绍Java中JSON格式反序列化为Map且保证存取顺序一致的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未... 目录背景问题解决方法总结背景做项目涉及两个微服务之间传数据时,需要提供方将Map类型的数据序列化为co

Nginx Location映射规则总结归纳与最佳实践

《NginxLocation映射规则总结归纳与最佳实践》Nginx的location指令是配置请求路由的核心机制,其匹配规则直接影响请求的处理流程,下面给大家介绍NginxLocation映射规则... 目录一、Location匹配规则与优先级1. 匹配模式2. 优先级顺序3. 匹配示例二、Proxy_pa