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 ...
随机推荐
- ASP.NET MVC Model元数据(一)
ASP.NET MVC Model元数据(一) 前言 在我初学的时候对Model元数据的概念很模糊,或者说是在大脑中没有它的一个模型,作为小白的我去看网上的一些文章还是两眼一黑啥都看不明白,然后我想退 ...
- CI Weekly #5 | 微服务架构下的持续部署与交付
CI Weekly 围绕『 软件工程效率提升』 进行一系列技术内容分享,包括国内外持续集成.持续交付,持续部署.自动化测试. DevOps 等实践教程.工具与资源,以及一些工程师文化相关的程序员 Ti ...
- Laravel 5.3 登录注册底层实现详解
每个控制器都使用 trait 来引入它们需要的方法 */ 用于处理用户登录认证 用于处理新用户注册 包含重置密码逻辑 用于处理重置密码邮件链接 认证需要的视图 包含了应用的基础布局文件 ...
- jQuery:实现两个<select>控件的互移操作
一.直接上代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> < ...
- sql无限递归查询
--------------所有子集数据包括自己--------------------- CREATE PROCEDURE ALLSON @ID INT AS BEGIN WITH CTE AS ( ...
- 《你不知道的JavaScript》整理(二)——this
最近在读一本进阶的JavaScript的书<你不知道的JavaScript(上卷)>,这次研究了一下“this”. 当一个函数被调用时,会创建一个活动记录(执行上下文). 这个记录会包含函 ...
- Java jacob调用打印机打印word文档
前面说了Java如何生成复杂的Word文档,今年记录下Java如何调用打印机打印word文档. 起初用的是自带的PrintJob,但是系统提供的打印机制并不成熟完整.网上的代码也是千篇一律,在我的打印 ...
- SharePoint 2013 configure and publish infopth
This article will simply descript how to configure and publish a InfoPath step by step. Note: To con ...
- 手动制作微信h5分享活动页面
现在网上有很多自动制作h5宣传页的网站,可以通过传图,点几下鼠标就可以制作一个集动画.生产二维码等各种功能于一身的h5微信宣传页.对于运营来讲,非常方便,没有技术门槛,不足之处就是只有特定的动画效果, ...
- 1.ASP.NET MVC使用EPPlus,导出数据到Excel中
好久没写博客了,今天特地来更新一下,今天我们要学习的是如何导出数据到Excel文件中,这里我使用的是免费开源的Epplus组件. 源代码下载:https://github.com/caofangshe ...