什么是 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的构造和解析的更多相关文章

  1. java中json数据生成和解析(复杂对象演示)

    1.json简单介绍 1.1 json是最流行和广泛通用的数据传输格式,简称JavaScript Object Notation,最早在JavaScript中使用. 1.2 举个例子,下面是一个jso ...

  2. java中json的使用和解析

    1.创建json对象 1.1 创建JSONObject对象 使用map初始化json @Test public void test1() { Map<String, Object> map ...

  3. Java中JSON字符串与java对象的互换实例详解

    这篇文章主要介绍了在java中,JSON字符串与java对象的相互转换实例详解,非常不错,具有参考借鉴价值,需要的朋友可以参考下 在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JS ...

  4. java中 json和bean list map之间的互相转换总结

    JSON 与 对象 .集合 之间的转换 JSON字符串和java对象的互转[json-lib]   在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JSON等,JSON作为一个轻量级 ...

  5. (转)Java中JSON字符串与java对象的互换实例详解

    在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JSON等,JSON作为一个轻量级的数据格式比xml效率要高,XML需要很多的标签,这无疑占据了网络流量,JSON在这方面则做的很好, ...

  6. Java中JSON字符串与java对象的互换实例详解(转)

    http://www.jb51.net/article/90914.htm 在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JSON等,JSON作为一个轻量级的数据格式比xml效率要 ...

  7. 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 ...

  8. Java学习笔记--xml构造与解析之Sax的使用

    汇总:xml的构造与解析 http://www.cnblogs.com/gnivor/p/4624058.html 参考资料:http://www.iteye.com/topic/763895 利用S ...

  9. Java中json工具对比分析

    Java中几个json工具分析 1, 环境 JDK1.6+IDE(IntelliJ IDEA)+windowsXP+GBK编码 2,分析对象 jackson1.8.2 http://jackson.c ...

随机推荐

  1. Oracle数据库Job的下次执行时间老是变动问题

    job的 interval设置为 sysdate+1 结果好多客户的这个时间最后会变的乱起八糟, 或是 导入 , 或是手动执行了等等, 还有自动会变的, 而且不少, 觉得莫名其妙, , 今天网上搜了下 ...

  2. 基于Caffe的Large Margin Softmax Loss的实现(上)

    小喵的唠叨话:在写完上一次的博客之后,已经过去了2个月的时间,小喵在此期间,做了大量的实验工作,最终在使用的DeepID2的方法之后,取得了很不错的结果.这次呢,主要讲述一个比较新的论文中的方法,L- ...

  3. Email系列(QQ邮箱 + 含附件的邮箱案例 + 项目实战)

    平台之大势何人能挡? 带着你的Net飞奔吧! http://www.cnblogs.com/dunitian/p/4822808.html 邮箱系列:https://github.com/duniti ...

  4. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(10)-系统菜单栏[附源码]

    系列目录 似乎我们需要更多的模块了,我们有一个样例程序,可以帮助我们以后的系统开发做很多对照,我们稍后还有系统日志和系统异常的记录,这时浏览发生了困难,我们这一节来完成一个大家比较喜欢的东西吧,系统菜 ...

  5. CRL快速开发框架系列教程八(使用CRL.Package)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  6. 增强学习(三)----- MDP的动态规划解法

    上一篇我们已经说到了,增强学习的目的就是求解马尔可夫决策过程(MDP)的最优策略,使其在任意初始状态下,都能获得最大的Vπ值.(本文不考虑非马尔可夫环境和不完全可观测马尔可夫决策过程(POMDP)中的 ...

  7. 剖析 HTTP 协议

    HTTP 概述 HTTP 是什么? HTTP(HyperText Transfer Protocol,超文本传输协议)是WWW (World Wide Web)实现数据通信的基石. HTTP是由IET ...

  8. javaWeb https连接器

    互联网加密原理 tomcat服务器启动时候会启动多个Connector(连接器),而Tomcat服务器的连接器又分为加密连接器和非加密连接器 .(一般我们使用http协议的是非加密,https的是加密 ...

  9. 基于HTML5实现3D监控应用流动效果

    http://www.hightopo.com/guide/guide/core/lighting/examples/example_flowing.html 流动效果在3D领域有着广泛的应用场景,如 ...

  10. 来,一起让我们越来越懒,面向CSS、JS未来编程。(9.28已更新)

    2016.10.29更新 本文存在大量的错误,仅供参考. 不知不觉在前端领域马上一个年头就要过去了,然而再看看自己的代码,果然够烂,那么为什么代码一直没有用面向对象的思维去写CSS呢?首先有两点:一点 ...