JAVA & JSON详解
JSON定义
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、C#、Java、JavaScript、Perl、Python等)。这些特性使JSON成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成(网络传输速率)。
JSON用途
使用基于JavaScript的应用程序,其中包括浏览器扩展和网站
使用JSON格式序列化和结构化的数据传输网络连接
这主要用于服务器和Web应用程序之间的数据传输
Web服务和API采用JSON格式提供公共数据
它可以用来与现代编程语言
JSON的特点
易于读写JSON
轻量级的基于文本的交换格式
独立语言
JSON 语法规则
- 数据在键值对中
- 数据由逗号分隔
- 花括号保存对象
- 方括号保存数组
JSON 名称/值对
{"firstName":"Brett","lastName":"McLaughlin","email":"aaaa"}
JSON格式支持的数据类型有以下:
| 类型 | 描述 |
|---|---|
| Number | 在JavaScript中的双精度浮点格式 |
| String | 双引号的反斜杠转义的Unicode |
| Boolean | true 或 false |
| Array | 值的有序序列 |
| Value | 它可以是一个字符串,一个数字,真的还是假(true/false),空(null )等 |
| Object | 无序集合键值对 |
| Whitespace | 可以使用任何一对中的令牌 |
| null | empty |
以下转自:易百教程网
JSON和Java实体之间的映射
JSON.simple实体映射从左侧向右侧解码或解析,并映射实体从右侧到左侧编码。
| JSON | Java |
|---|---|
| string | java.lang.String |
| number | java.lang.Number |
| true|false | ava.lang.Boolean |
| null | null |
| array | java.util.List |
| object | java.util.Map |
虽然解码,默认 java.util.List的具体类是具体类 org.json.simple.JSONArray 和默认 java.util.Map 是org.json.simple.JSONObject。
下面是一个简单的例子来编码JSONObject使用Java的JSON对象的一个子类的java.util.HashMap 无序。如果您需要严格的顺序元素使用方法JSONValue.toJSONString(映射)有序映射实现作为 java.util.LinkedHashMap等。
import org.json.simple.JSONObject; class JsonEncodeDemo
{
public static void main(String[] args)
{
JSONObject obj = new JSONObject(); obj.put("name", "foo");
obj.put("num", new Integer(100));
obj.put("balance", new Double(1000.21));
obj.put("is_vip", new Boolean(true)); System.out.print(obj);
}
}
虽然上述程序的编译和执行,这将产生以下结果:
{"balance": 1000.21, "num":100, "is_vip":true, "name":"foo"}
以下是另一个例子,它显示了使用Java的JSONObject 的 JSON对象流:
import org.json.simple.JSONObject; class JsonEncodeDemo
{
public static void main(String[] args)
{
JSONObject obj = new JSONObject(); obj.put("name","foo");
obj.put("num",new Integer(100));
obj.put("balance",new Double(1000.21));
obj.put("is_vip",new Boolean(true)); StringWriter out = new StringWriter();
obj.writeJSONString(out); String jsonText = out.toString();
System.out.print(jsonText);
}
}
虽然上述程序的编译和执行,这将产生以下结果:
{"balance": 1000.21, "num":100, "is_vip":true, "name":"foo"}
在Java的JSON解码
下面的例子利用的JSONObject 和JSONArray JSONObject 是一个java.util.Map JSONArray是一个java.util.List,所以可以对其进行访问 Map 和List 的标准操作。
import org.json.simple.JSONObject;
import org.json.simple.JSONArray;
import org.json.simple.parser.ParseException;
import org.json.simple.parser.JSONParser; class JsonDecodeDemo
{
public static void main(String[] args)
{
JSONParser parser=new JSONParser();
String s = "[0,{\"1\":{\"2\":{\"3\":{\"4\":[5,{\"6\":7}]}}}}]";
try{
Object obj = parser.parse(s);
JSONArray array = (JSONArray)obj;
System.out.println("The 2nd element of array");
System.out.println(array.get(1));
System.out.println(); JSONObject obj2 = (JSONObject)array.get(1);
System.out.println("Field \"1\"");
System.out.println(obj2.get("1")); s = "{}";
obj = parser.parse(s);
System.out.println(obj); s= "[5,]";
obj = parser.parse(s);
System.out.println(obj); s= "[5,,2]";
obj = parser.parse(s);
System.out.println(obj);
}catch(ParseException pe){
System.out.println("position: " + pe.getPosition());
System.out.println(pe);
}
}
}
虽然上述程序的编译和执行,这将产生以下结果:
The 2nd element of array
{"1":{"2":{"3":{"4":[5,{"6":7}]}}}} Field "1"
{"2":{"3":{"4":[5,{"6":7}]}}}
{}
[5]
[5,2]
JAVA & JSON详解的更多相关文章
- Spring Boot 之使用 Json 详解
Spring Boot 之使用 Json 详解 简介 Spring Boot 支持的 Json 库 Spring Web 中的序列化.反序列化 指定类的 Json 序列化.反序列化 @JsonTest ...
- Java内部类详解
Java内部类详解 说起内部类这个词,想必很多人都不陌生,但是又会觉得不熟悉.原因是平时编写代码时可能用到的场景不多,用得最多的是在有事件监听的情况下,并且即使用到也很少去总结内部类的用法.今天我们就 ...
- 黑马----JAVA迭代器详解
JAVA迭代器详解 1.Interable.Iterator和ListIterator 1)迭代器生成接口Interable,用于生成一个具体迭代器 public interface Iterable ...
- C++调用JAVA方法详解
C++调用JAVA方法详解 博客分类: 本文主要参考http://tech.ccidnet.com/art/1081/20050413/237901_1.html 上的文章. C++ ...
- Java虚拟机详解----JVM常见问题总结
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- JSON详解(转)
JSON详解 JSON的全称是”JavaScript Object Notation”,意思是JavaScript对象表示法,它是一种基于文本,独立于语言的轻量级数据交换格式.XML也是一种数据交换格 ...
- [转] Java内部类详解
作者:海子 出处:http://www.cnblogs.com/dolphin0520/ 本博客中未标明转载的文章归作者海子和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置 ...
- Java面向对象详解
Java面向对象详解 前言:接触项目开发也有很长一段时间了,最近开始萌发出想回过头来写写以前学 过的基础知识的想法.一是原来刚开始学习接触编程,一个人跌跌撞撞摸索着往前走,初学的时候很多东西理解的也懵 ...
- java 乱码详解_jsp中pageEncoding、charset=UTF -8"、request.setCharacterEncoding("UTF-8")
http://blog.csdn.net/qinysong/article/details/1179480 java 乱码详解__jsp中pageEncoding.charset=UTF -8&quo ...
随机推荐
- Java程序员的日常——《编程思想》一切都是对象
今天终于看完了第一章,哈哈,万事开头难....刚开始被编程思想的第一章给蒙住了,讲一堆理论,没什么意思.从第二章开始,真正的开始讲解Java相关的内容,有了一定的开发经验后,再次阅读起来,感觉收获良多 ...
- paip.jdbc 连接自动释放的测试
paip.jdbc 连接自动释放的测试 使用的mysql jdbc3.1.6 以及5.1.7 测试结果,在没有conn.close()的情况哈.. 作者Attilax 艾龙, EMAIL:146 ...
- 爬虫神器xpath的用法(一)
1.如果你没有安装lxml,请运行pip install lxml或者easy_install lxml安装,如果在安装过程中失败的话, 是因为lxml需要依赖某些库文件,具体可以问下度娘,这里不再赘 ...
- Azure Stack如何解决混合云的种种挑战
微软希望能够通过Azure Stack来帮助企业连接他们的私有云和公共云.但这仍然是一项进行中的工作. 大多数企业都不愿意将所有IT运营都放到公有云中.相反,他们希望可以灵活的在这两个共享的基础架构即 ...
- iOS开发实用技巧—Objective-C中的各种遍历(迭代)方式
iOS开发实用技巧—Objective-C中的各种遍历(迭代)方式 说明: 1)该文简短介绍在iOS开发中遍历字典.数组和集合的几种常见方式. 2)该文对应的代码可以在下面的地址获得:https:// ...
- 关于C# byte[]与struct的转换
转自:http://blog.chinaunix.net/uid-215617-id-2213082.html Some of the C# code I've been writing recent ...
- 【转】Android布局优化之ViewStub
ViewStub是Android布局优化中一个很不错的标签/控件,直接继承自View.虽然Android开发人员基本上都听说过,但是真正用的可能不多. ViewStub可以理解成一个非常轻量级的Vie ...
- Crontab中shell每分钟执行一次HDFS文件上传不执行的解决方案
一.Crontab -e 加入输出Log */1 * * * * /qiwen_list/upload_to_hdfs.sh > /qiwen_list/mapred.log 2>& ...
- nginx location 的配置
一.基本语法:location [=|~|~*|^~] /uri/ { … } 二.分类: 1.基本location:以“ = ”或“ ^~ ”为前缀或者没有任何前缀的 /uri/ 2.正则locat ...
- Linux 的启动流程(转)
原文链接:http://blog.jobbole.com/46078/ 半年前,我写了<计算机是如何启动的?>,探讨BIOS和主引导记录的作用. 那篇文章不涉及操作系统,只与主板的板载程序 ...