什么是 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 ...
随机推荐
-
Linux文件读写机制及优化方式
导读 Linux是一个可控性强的,安全高效的操作系统.本文只讨论Linux下文件的读写机制,不涉及不同读取方式如read,fread,cin等的对比,这些读取方式本质上都是调用系统api read,只 ...
-
(MST) HDOJ 1102 Constructing Roads
怎么说呢 这题就是个模板题 但是 hud你妹夫啊说好的只有一组数据呢??? 嗯??? wa到家都不认识了好吗 #include <cstdio> #include <cstring& ...
-
高端PCB设计相关知识整理
PCB的设计布局布线实际上是一门很复杂而且大部分靠经验来做的学问,很多东西也有点玄乎,但有很多经验性的结论和公式还是可以参考的 保证原创,一天不一定写的完 CH.1 更加严重的电磁干扰 首先基本上微电 ...
-
黑马程序员——JAVA基础之内部类,匿名内部类
------- android培训.java培训.期待与您交流! ---------- 内部类 将一个类定义在另一个类的里面,对里面那个类就称为内部类(内置类,嵌套类). 内部类访问特点: • 内部 ...
-
Android横竖屏切换总结
Android横竖屏切换总结(Android资料) Android横竖屏要解决的问题应该就两个: 一.布局问题 二.重新载入问题 1.布局问题:如果不想让软件在横竖屏之间切换,最简单的办法就是在项目的 ...
-
Android UI ActionBar功能-Action Bar 左上角的向上或返回按钮
ActionBar在左上角还提供了一个向上或返回的按钮,默认情况下是隐藏的需要在代码中开启: 官方文档:http://wear.techbrood.com/training/basics/action ...
-
很酷的CSS3仿Facebook登录表单
原文:很酷的CSS3仿Facebook登录表单 今天看到一款很不错的CSS3登录表单,外观是仿Facebook的登录表单,还挺不错的,另外也支持简单的表单输入框验证.下图是表单的效果图: 我们也可以在 ...
-
取汉子拼音首字母的C#和VB.Net方法
转载http://blog.fwhyy.com/2012/03/take-the-first-initials-method-of-csharp-and-vbnet/
-
再起航,我的学习笔记之JavaScript设计模式06(工厂方法模式)
上一次已经给大家介绍了简单工厂模式,相信大家对创建型设计模式有了初步的了解,本次我将给大家介绍的是工厂方法模式. 工厂方法模式 工厂方法模式(Factory Method):通过对产品类的抽象使其创建 ...
-
DVWA 黑客攻防演练(十四)CSRF 攻击 Cross Site Request Forgery
这么多攻击中,CSRF 攻击,全称是 Cross Site Request Forgery,翻译过来是跨站请求伪造可谓是最防不胜防之一.比如删除一篇文章,添加一笔钱之类,如果开发者是没有考虑到会被 C ...