JSON基础(Java)
1.json maven 依赖(以下都以第一个包为例)
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20160212</version>
</dependency>
(
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4</version>
<classifier>jdk15</classifier>
</dependency>
)
2.表示法:
(1)JSON String 表示法,
用转义字符表示:
String aa = "{\"1\":\"小红\",\"2\":\"小王\",\"3\":\"小明\",\"4\":\"小张\"}";
用单引号代替双引号:
String aa = "{'name':'zack','age':'20'}";
(2)org.json jar 下的 JSONObject 和 JSONArray
JSONObject jsonObject = new JSONObject();
jsonObject.put("1", "Rose");
jsonObject.put("2", "JACK");
jsonObject.put("3", "Mike");
jsonObject.put("4", "Joe");
System.out.println(jsonObject); JSONArray jsonArray = new JSONArray();
jsonArray.put(1, "wwww");
jsonArray.put(6, "aa");
System.out.println(jsonArray);
JSONObject
- json对象在花括号中书写;
- 对象包含多个名称/值对;
{"firstname":"John","lastname":"Doe"}
JSONArray
- json数组在方括号中书写
- 数组可包含多个对象
{
"employees":[
{"firstname":"alex","lastname":"andy"},
{"firstname":"zack","lastname":"herry"}
]
}
JSON数组和JSON对象的区别
JSON数组:
{
"cat":"it",
"language":[
{"id":1,"ide":"eclipse","name":Java},
{"id":2,"ide":"XCode","name":"Swift"},
{"id":3,"ide":"Visual Stdio","name":"C#"}
],
"pop":true
} JOSN对象:
{
"name": "Tim",
"info": {
"score": {
"english": "A",
"math": "B"
},
"age": 20
}
}
(3)JSON的表示法
第一种
- 以(key/value)对的形式存在的无序的jsonObject对象。一个对象以“{”开始,以“}”结束。每个“名称”后跟一个“:”;“名称/值”对之间使用“,”分割。
- 对于这种数据格式,key值必须要是String类型,而对于value,可以是String、number、object、array、boolean、null等数据类型
{
"name":"zack",
"age":20
}
第二种
有序的value集合,这种形式被称为jsonArray,数组是值(value)的有序集合。一个数组以“[”开始,以“]”结束,值之间使用“,”分隔。
{
"student":
[
{"name":"zack","age":20},
{"name":"jack","age":25}
]
}
3.map转换为JSON
方法一:
Map<String, String> map = new HashMap<>();
map.put("1", "小红");
map.put("2", "小王");
map.put("3", "小明");
map.put("4", "小张");
map.put("5", "小赵");
ObjectMapper json = new ObjectMapper();
try {
String string = json.writeValueAsString(map);
JSONObject jsonObject = new JSONObject(string);
} catch (JsonProcessingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
方法2:
用maven引入fastjson jar包
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.24</version>
</dependency>
Map<String, String> map = new HashMap<>();
map.put("1", "小红");
map.put("2", "小王");
map.put("3", "小明");
map.put("4", "小张");
map.put("5", "小赵");
String aString = JSON.toJSONString(map);
System.out.println(aString);
4.JSON的解析
(1)第一个jar 包解析法:
String str = "{\"1\":\"小红\",\"2\":\"小王\",\"3\":\"小明\",\"4\":\"小张\"}";
JSONObject jsonObject = new JSONObject(str);
System.out.println(jsonObject.getString("1"));
System.out.println(jsonObject.getString("2"));
System.out.println(jsonObject.getString("3"));
多层JSON嵌套JSONObject :
String jsonData="{\"name\":\"lily\",\"age\":23,\"addr\":{\"city\":guangzhou,\"province\":guangdong}}";
JSONObject jsonObject1 =new JSONObject(jsonData);
JSONObject jsonObject2 = jsonObject1.getJSONObject("addr");
System.out.println(jsonObject2.getString("city"));
JSONArray 嵌套 JSONObject
String jsonString = "{'student':[{'name':'zack','age':20},{'name':'jack','age':25}]}";
JSONObject jsonObject = new JSONObject(jsonString); JSONArray jsonArray = jsonObject.getJSONArray("student");
System.out.println(jsonArray);
for(int i=0;i<jsonArray.length();i++){
JSONObject jObject = jsonArray.getJSONObject(i);
System.out.println(jObject.getString("name"));
}
在不知道key值的情况下可以如下解析:
String aa = "{'name':'zack','age':'20'}";
JSONObject jsonObject = new JSONObject(aa); Iterator<?> iterator = jsonObject.keys();
String key = null; while (iterator.hasNext()) {
key = (String) iterator.next();
System.out.println(key);
System.out.println(jsonObject.getString(key));
}
(2)第二个jar包解析法(需要用[ ]把字符串包起来)
String aa = "[{\"1\":\"小红\",\"2\":\"小王\",\"3\":\"小明\",\"4\":\"小张\"}]";
JSONArray jsonArray = JSONArray.fromObject(aa);
if (jsonArray.size() > 0) {
// 遍历 jsonarray 数组,把每一个对象转成 json 对象
for (int i = 0; i < jsonArray.size(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
System.out.println(jsonObject.get("1"));
System.out.println(jsonObject.get("2"));
System.out.println(jsonObject.get("3"));
}
}
5.JSON 转换为替他格式
(1)to String
String str = jsonObject.toString();
6.JSONTokener
- JSONTokener读取包含json格式数据的文件,然后可以将JSONTokener对象作为参数来构造JSONObject或JSONArray,然后再进行相应的解析。
JSONTokener jsonTokener = new JSONTokener(jsonStr);
JSONObject jsonObject = new JSONObject(jsonTokener);
JSON基础(Java)的更多相关文章
- 【Java EE 学习 31】【JavaScript基础增强】【Ajax基础】【Json基础】
一.JavaScript基础增强 1.弹窗 (1)使用window对象的showModelDialog方法和showModelessDialog方法分别可以弹出模式窗口和非模式窗口,但是只能在IE中使 ...
- 快速掌握Ajax-Ajax基础实例(Ajax返回Json在Java中的实现)
(转)实例二:Ajax返回Json在Java中的实现 转自http://www.cnblogs.com/lsnproj/archive/2012/02/09/2341524.html#2995114 ...
- JSON基础知识总结
JSON基础 一.JSON简介 JSON,全称“JavaScript Object Notation(JavaScript对象表示法)”,起源于JavaScript的对象和数组.JSON,说白了就是J ...
- json基础
1 xml缺点 用xml表示一个对象,数据存储效率低 <person> <firstName>Morra<firstName> <lastName>Do ...
- JSONObject.fromObject(map)(JSON与JAVA数据的转换)
JSON与JAVA数据的转换(JSON 即 JavaScript Object Natation,它是一种轻量级的数据交换格式,非常适合于服务器与 JavaScript 的交互.) 上一篇文章中有这么 ...
- java基础---->java中正则表达式二
跟正则表达式相关的类有:Pattern.Matcher和String.今天我们就开始Java中正则表达式的学习. Pattern和Matcher的理解 一.正则表达式的使用方法 一般推荐使用的方式如下 ...
- json学习系列(8)JSON与JAVA数据的相互转换实例
一.完整案例 先定义一个java实体对象,如下: package com.pcitc.json.cnblog; /** * SimInfo实体对象 * * @Description * @author ...
- JSON 与JAVA对象之间的转换(转)
JSON与XML两者目前在数据交互方面都有很高的使用率,随着现在SOA的兴起,异构系统的整合地位相应提高,本篇文章主要介绍JSON与JAVA对象之间的相互转换. 一.对普通类型的JSON模式的转换 一 ...
- net.sf.json.JSONException: java.lang.NoSuchMethodException
在尝试将json对象转换为list时候出现了如下错误 Exception in thread "main" net.sf.json.JSONException: java.lang ...
随机推荐
- linux清屏命令(clear,reset)
(1)clear 这个命令将会刷新屏幕,本质上只是让终端显示页向后翻了一页,如果向上滚动屏幕还可以看到之前的操作信息.一般都会用这个命令. (2)reset 这个命令将完全刷新终端屏幕,之前的终端输入 ...
- keepalived双机热备nginx
nginx目前是我最常用的反向代理服务,线上环境为了能更好的应对突发情况,一般会使用keepalived双机热备nginx或者使用docker跑nginx集群,keepalived是比较传统的方式,虽 ...
- Console 口配置 Telnet 登录方式典型配置指导
1.进入系统视图,启动 Telnet 服务 system-view [Sysname] telnet server enable 2.配置从 VTY 用户界面登录后可以访问的命令级别为 2 级 [Sy ...
- iOS.Animations.by.Tutorials.v2.0汉化(二)
翻译自:iOS.Animations.by.Tutorials.v2.0 第一节(第1章) 动画属性 现在你已经看到了动画是多么的简单,你可能很想知道你的视图控件是怎么动起来的.本节将给你一个UIVi ...
- Android开发之Android Context Menu
1 Creatinga上下文菜单, Todefine上下文菜单的外观和行为,推翻youractivity的上下文菜单回滚方法,onCreateContextMenu()和onContextItemSe ...
- 第6章 MSI和MSI-X中断机制
在PCI总线中,所有需要提交中断请求的设备,必须能够通过INTx引脚提交中断请求,而MSI机制是一个可选机制.而在PCIe总线中,PCIe设备必须支持MSI或者MSI-X中断请求机制,而可以不支持IN ...
- 错误代码: 1045 Access denied for user 'skyusers'@'%' (using password: YES)
1. 错误描述 GRANT ALL PRIVILEGES ON *.* TO root@"%" IDENTIFIED BY "."; 1 queries exe ...
- 【译】gRPC负载均衡
原文地址:https://github.com/grpc/grpc/blob/master/doc/load-balancing.md gRPC负载均衡 范围 本文档解释了gPRC的负载均衡的设计. ...
- .Net Core使用Redis的一个入门简单Demo
本例子讲述一个在.Net core环境中对Redis数据库进行增删改查操作. 首先,要安装好Redis数据库,至于怎么安装,本文不再赘述,可以自行百度,有很详细的教程. 安装好之后,在CMD中输入 r ...
- 巨幅SQL优化(SQL Tuning)——秒杀十几个小时不出结果的SQL
今天接到用户的需求,某程序十几个小时没出结果了,很纳闷儿,于是让相关人员取了explain plan等信息,拿到explain plan后,搂一眼,就知道问题出在了哪里,explain plan跑偏了 ...