Java中json的构造和解析
什么是 Json?
JSON(JvaScript Object Notation)(官网网站:http://www.json.org/)是 一种轻量级的数据交换格式。
易于人阅读和编写。同时也易于机器解析和生成。它基于 JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999 的一个子集。
JSON 采用完全独立于语言的文本格式,但是也使用了类似于 C 语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。 这些特性使 JSON 成为理想的数据交换语言。
JSON 的两种结构
1.“名称/值”对的集合(A collection of name/value pairs)。
不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表 (hash table),有键列表(keyed list),或者关联数组 (associative array)。
在 Java 语言中,我们可以将它理解成 HashMap。
对象是一个无序的"'名称/值'对"集合。一个对象以"{"(左括号)开始,"}"(右括号)结束。每个“名称”后跟一个":"(冒号);"'名称/值' 对"之间使用","(逗号)分隔。
示例:var json = {"name":"Jack","age":90,"Marray":true};

2. 值的有序列表(An ordered list of values)。
在大部分语言中,它被理解为数组(Array 或 List)。
数组是值(value)的有序集合。一个数组以"["(左中括号)开始,"]"(右中括号)结束。值之间使用","(逗号)分隔。
示例:var json = ["Jack","Rose","Tom",89,true,false];

Java中对json的操作常用的方式有两种:org.json.jar 和 json-lib.jar
一、使用org.json.jar(下载)
import java.util.ArrayList;
import java.util.List;
import org.json.JSONArray;
import org.json.JSONObject;
import com.kevin.paper.entity.PubPaper;
import com.kevin.paper.entity.PubPaperAuthor; public class Test {
public String jsonConstruct(){
JSONObject json=new JSONObject();
json.put("Article_id", "66496");
json.put("Title", "Exploring the beta quadrant");
json.put("Author", "Pietarinen, Ahti-Veikko");
json.put("Journal", "SYNTHESE");
json.put("ISSN", "0039-7857");
json.put("PublishDate", "2015-04-01");
json.put("Pages", "941-970");
json.put("SCI", "true");
json.put("EI", "false");
json.put("SSCI", "true");
//嵌套json
JSONArray jsonMembers = new JSONArray();
JSONObject author1 = new JSONObject();
author1.put("ZZGH", "150026");
author1.put("ZZXM", "AHTI-VEIKKO PIETARINEN");
author1.put("SFDYZZ","1");
author1.put("SFTXZZ", "1");
jsonMembers.put(author1);
json.put("Authors", jsonMembers); return json.toString();
} public PubPaper jsonAnalysis(){
PubPaper pubPaper = new PubPaper();
String jsonData="{\"Article_id\":66496,\"Title\":\"Exploring the beta quadrant\",\"Author\":\"Pietarinen, Ahti-Veikko\"," +
"\"Journal\":\"SYNTHESE\",\"ISSN\":\"0039-7857\",\"PublishDate\":\"2015-04-01\",\"Pages\":\"941-970\"," +
"\"SCI\":\"true\",\"EI\":\"false\",\"SSCI\":\"true\"," +
"\"Authors\":[{\"ZZGH\":\"150026\",\"ZZXM\":\"AHTI-VEIKKO PIETARINEN\",\"SFDYZZ\":1,\"SFTXZZ\":1}]}";
JSONObject json= new JSONObject(jsonData);
pubPaper.setArticle_id(json.get("Article_id").toString());
pubPaper.setTitle(json.get("Title").toString());
pubPaper.setAuthor(json.get("Author").toString());
pubPaper.setJournal(json.get("Journal").toString());
pubPaper.setISSN(json.get("ISSN").toString());
pubPaper.setPublishDate(json.get("PublishDate").toString());
pubPaper.setPages(json.get("Pages").toString());
pubPaper.setSCI(json.get("SCI").toString());
pubPaper.setEI(json.get("EI").toString());
pubPaper.setSSCI(json.get("SSCI").toString());
//解析嵌套的json转换成对象集合
List<PubPaperAuthor> pubAuthorList = new ArrayList();
JSONArray jsonArray=json.getJSONArray("Authors");
for(int i=0;i<jsonArray.length();i++){
JSONObject author=(JSONObject) jsonArray.getJSONObject(i);
PubPaperAuthor pubPaperAuthor = new PubPaperAuthor();
pubPaperAuthor.setZZGH(author.get("ZZGH").toString());
pubPaperAuthor.setZZXM(author.get("ZZXM").toString());
pubPaperAuthor.setSFDYZZ(author.get("SFDYZZ").toString());
pubPaperAuthor.setSFTXZZ(author.get("SFTXZZ").toString());
pubAuthorList.add(pubPaperAuthor);
}
pubPaper.setAuthors(pubAuthorList);
return pubPaper;
}
}
二、使用json-lib(下载)
json-lib 是一个 Java 类库(官网:http://json-lib.sourceforge.net/)可以实现如下功能:
转换 javabeans, maps, collections, java arrays 和 XML 成为 json 格式数据
转换 json 格式数据成为 javabeans 对象
Json-lib 需要的 jar 包:
commons-beanutils-1.8.3.jar
commons-collections-3.2.1.jar
commons-lang-2.6.jar
commons-logging-1.1.1.jar
ezmorph-1.0.6.jar
json-lib-2.4-jdk15.jar
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set; import com.kevin.person.entity.Person; import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import net.sf.json.JsonConfig; public class Test {
/** 将 Array 解析成 Json 串。使用 JSONArray 可以解析 Array 类型 */
public void arrayToJSON() {
// 将 Array 解析成 Json 串
String[] str = { "Jack", "Tom", "90", "true" };
JSONArray json = JSONArray.fromObject(str);
System.err.println(json);// ["Jack","Tom","90","true"] // 对像数组,注意数字和布而值
Object[] o = { "北京", "上海", 89, true, 90.87 };
json = JSONArray.fromObject(o);
System.err.println(json);// ["北京","上海",89,true,90.87] // 使用集合类
List<String> list = new ArrayList<String>();
list.add("Jack");
list.add("Rose");
json = JSONArray.fromObject(list);
System.err.println(json);// ["Jack","Rose"] // 使用 set 集
Set<Object> set = new HashSet<Object>();
set.add("Hello");
set.add(true);
set.add(99);
json = JSONArray.fromObject(set);
System.err.println(json);// [99,true,"Hello"]
} /** 将 JavaBean/Map 解析成 JSON 串。 使用JSONObject 解析 */
public void javaBeanOrMapToJSON() {
JSONObject jsonObject = new JSONObject();
// 解析 HashMap
Map<String, Object> map = new HashMap<String, Object>();
map.put("name", "Tom");
map.put("age", 33);
// 解析 JavaBean
Person person = new Person("A001", "Jack");
// jsonObject = jsonObject.fromObject(person);
// 解析嵌套的对象
map.put("person", person);
jsonObject = JSONObject.fromObject(map);
System.out.println(jsonObject);// {"person":{"id":"A001","name":"Jack"},"age":33,"name":"Tom"}
} /** 使用 JsonConfig 过虑属性:适用于 JavaBean/Map */
public void jsonConfigForJavaBeanOrMap() {
JsonConfig config = new JsonConfig();
config.setExcludes(new String[] { "name" });// 指定在转换时不包含哪些属性
Person person = new Person("A001", "Jack");
JSONObject jsonObject = JSONObject.fromObject(person, config);// 在转换时传入之前的配置对象
System.out.println(jsonObject);// {"id":"A001"}
} /** 将 Json 串转换成 Array */
public void jsonToArray() {
JSONArray jsonArray = JSONArray.fromObject("[89,90,99]");
Object array = JSONArray.toArray(jsonArray);
System.out.println(array);// [Ljava.lang.Object;@1e5003f6
System.out.println(Arrays.asList((Object[]) array));// [89, 90, 99]
} /** 将 Json 串转成 JavaBean/Map */
public void jsonToJavaBeanOrMap() {
// 将 Json 形式的字符串转换为 Map
String str = "{\"name\":\"Tom\",\"age\":90}";
JSONObject jsonObject = JSONObject.fromObject(str);
Map<String, Object> map = (Map<String, Object>) JSONObject.toBean(jsonObject, Map.class);
System.out.println(map);// {age=90, name=Tom} // 将 Json 形式的字符串转换为 JavaBean
str = "{\"id\":\"A001\",\"name\":\"Jack\"}";
jsonObject = JSONObject.fromObject(str);
System.out.println(jsonObject);
Person person = (Person) JSONObject.toBean(jsonObject, Person.class);
System.out.println(person);// Person [id=A001, name=Jack]
}
}
Java中json的构造和解析的更多相关文章
- java中json数据生成和解析(复杂对象演示)
1.json简单介绍 1.1 json是最流行和广泛通用的数据传输格式,简称JavaScript Object Notation,最早在JavaScript中使用. 1.2 举个例子,下面是一个jso ...
- java中json的使用和解析
1.创建json对象 1.1 创建JSONObject对象 使用map初始化json @Test public void test1() { Map<String, Object> map ...
- Java中JSON字符串与java对象的互换实例详解
这篇文章主要介绍了在java中,JSON字符串与java对象的相互转换实例详解,非常不错,具有参考借鉴价值,需要的朋友可以参考下 在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JS ...
- java中 json和bean list map之间的互相转换总结
JSON 与 对象 .集合 之间的转换 JSON字符串和java对象的互转[json-lib] 在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JSON等,JSON作为一个轻量级 ...
- (转)Java中JSON字符串与java对象的互换实例详解
在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JSON等,JSON作为一个轻量级的数据格式比xml效率要高,XML需要很多的标签,这无疑占据了网络流量,JSON在这方面则做的很好, ...
- Java中JSON字符串与java对象的互换实例详解(转)
http://www.jb51.net/article/90914.htm 在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JSON等,JSON作为一个轻量级的数据格式比xml效率要 ...
- Java中 Json的使用
转自:http://huyan.couplecoders.tech/%E5%BC%80%E5%8F%91%E8%80%85%E6%89%8B%E5%86%8C/2018/11/02/Java%E4%B ...
- Java学习笔记--xml构造与解析之Sax的使用
汇总:xml的构造与解析 http://www.cnblogs.com/gnivor/p/4624058.html 参考资料:http://www.iteye.com/topic/763895 利用S ...
- Java中json工具对比分析
Java中几个json工具分析 1, 环境 JDK1.6+IDE(IntelliJ IDEA)+windowsXP+GBK编码 2,分析对象 jackson1.8.2 http://jackson.c ...
随机推荐
- [翻译]AKKA笔记 - CHILD ACTORS与ACTORPATH -6
原文:http://rerun.me/2014/10/21/akka-notes-child-actors-and-path/ Actor是完全的继承结构.你创建的任何Actor肯定都是一个其他Act ...
- 从scheduler is shutted down看程序员的英文水平
我有个windows服务程序,今天重点在测试系统逻辑.部署后,在看系统日志时,不经意看到一行:scheduler is shutted down. 2016-12-29 09:40:24.175 {& ...
- Android开发学习之路-自定义控件(天气趋势折线图)
之前写了个天气APP,带4天预报和5天历史信息.所以想着要不要加一个折线图来显示一下天气变化趋势,难得有空,就写了一下,这里做些记录,脑袋不好使容易忘事. 先放一下效果: 控件内容比较简单,就是一个普 ...
- iOS引入JavaScriptCore引擎框架(一)
JavaScriptCore引擎 我们都知道WebKit是个渲染引擎,简单来说负责页面的布局,绘制以及层的合成,但是WebKit工程中不仅仅有关于渲染相关的逻辑,也集成了默认的javascri ...
- 读书笔记--SQL必知必会--Tips
01 - 如何获取SQL命令帮助信息 官方手册 help 或 help command MariaDB [(none)]> help General information about Mari ...
- Java正则速成秘籍(三)之见招拆招篇
导读 正则表达式是什么?有什么用? 正则表达式(Regular Expression)是一种文本规则,可以用来校验.查找.替换与规则匹配的文本. 又爱又恨的正则 正则表达式是一个强大的文本匹配工具,但 ...
- sql server查询可编程对象定义的方式对比以及整合
本文目录列表: 1.sql server查看可编程对象定义的方式对比 2.整合实现所有可编程对象定义的查看功能的存储dbo.usp_helptext2 3.dbo.helptext2的选择性测试 4. ...
- LCM性质 + 组合数 - HDU 5407 CRB and Candies
CRB and Candies Problem's Link Mean: 给定一个数n,求LCM(C(n,0),C(n,1),C(n,2)...C(n,n))的值,(n<=1e6). analy ...
- 『.NET Core CLI工具文档』(二).NET Core 工具遥测(应用信息收集)
说明:本文是个人翻译文章,由于个人水平有限,有不对的地方请大家帮忙更正. 原文:.NET Core Tools Telemetry 翻译:.NET Core 工具遥测(应用信息收集) .NET Cor ...
- C#开发微信门户及应用(5)--用户分组信息管理
在上个月的对C#开发微信门户及应用做了介绍,写过了几篇的随笔进行分享,由于时间关系,间隔了一段时间没有继续写这个系列的博客了,并不是对这个方面停止了研究,而是继续深入探索这方面的技术,为了更好的应用起 ...