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 名称/值对
1 | { "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等。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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); } } |
虽然上述程序的编译和执行,这将产生以下结果:
1 | { "balance" : 1000.21 , "num" : 100 , "is_vip" : true , "name" : "foo" } |
以下是另一个例子,它显示了使用Java的JSONObject 的 JSON对象流:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 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); } } |
虽然上述程序的编译和执行,这将产生以下结果:
1 | { "balance" : 1000.21 , "num" : 100 , "is_vip" : true , "name" : "foo" } |
在Java的JSON解码
下面的例子利用的JSONObject 和JSONArray JSONObject 是一个java.util.Map JSONArray是一个java.util.List,所以可以对其进行访问 Map 和List 的标准操作。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | 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); } } } |
虽然上述程序的编译和执行,这将产生以下结果:
1 2 3 4 5 6 7 8 | The 2nd element of array { "1" :{ "2" :{ "3" :{ "4" :[ 5 ,{ "6" : 7 }]}}}} Field "1" { "2" :{ "3" :{ "4" :[ 5 ,{ "6" : 7 }]}}} {} [ 5 ] [ 5 , 2 ] |
博客地址: | http://www.cnblogs.com/oumyye/ |
博客版权: | 本文以学习、研究和分享为主,欢迎转载,转载请务必注明出处,谢谢合作。 如果文中有不妥或者错误的地方请指出。如果觉得本文对你有所帮助不如【推荐】一下!如果你有更好的建议,不如留言一起讨论,共同进步! |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端