博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA & JSON详解
阅读量:7045 次
发布时间:2019-06-28

本文共 3577 字,大约阅读时间需要 11 分钟。

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 语法是 JavaScript 对象表示语法的子集。
  • 数据在键值对中
  • 数据由逗号分隔
  • 花括号保存对象
  • 方括号保存数组

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]

转载地址:http://mxqal.baihongyu.com/

你可能感兴趣的文章
华虹宏力探索智能制造 亚信安全洞察全网风险
查看>>
在PyODPS DataFrame自定义函数中使用pandas、scipy和scikit-learn
查看>>
无人机为何“一夜爆红”?开源飞控在其后助力
查看>>
LG有意进军自动驾驶领域, 或开发基于3D摄像头的安全驾驶辅助系统
查看>>
Android项目实战(十九):Android Studio 优秀插件: Parcelable Code Generator
查看>>
Linux启动/停止/重启Mysql数据库的方法
查看>>
Ubuntu 16.04安装SQLite Browser操作SQLite数据库
查看>>
能源区块链:无法被收买的数字账本,有望破解新能源骗补难题
查看>>
国内的服务机器人还缺点啥?
查看>>
【基础】mysql数据库(key_buffer_size)
查看>>
2-51单片机ESP8266学习-AT指令(开发板测试远程通信详细介绍)
查看>>
Node连接MySQL并封装其增删查改
查看>>
天猫国际首家线下店来了!阿里为什么要开跨境体验店?
查看>>
我国抢占“第二次量子革命”全球制高点
查看>>
Living the Stream: Live-streaming in China
查看>>
CommonJS/AMD/CMD/UMD概念初探
查看>>
字符串拷贝记得strcpy
查看>>
[微信小程序]通过计算其他view的高度,动态给定scroll-view的高度
查看>>
旋转图像
查看>>
中国电信天翼U盾产品荣获第三届网络安全国家标准优秀应用案例二等奖
查看>>