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)的更多相关文章

  1. 【Java EE 学习 31】【JavaScript基础增强】【Ajax基础】【Json基础】

    一.JavaScript基础增强 1.弹窗 (1)使用window对象的showModelDialog方法和showModelessDialog方法分别可以弹出模式窗口和非模式窗口,但是只能在IE中使 ...

  2. 快速掌握Ajax-Ajax基础实例(Ajax返回Json在Java中的实现)

    (转)实例二:Ajax返回Json在Java中的实现 转自http://www.cnblogs.com/lsnproj/archive/2012/02/09/2341524.html#2995114 ...

  3. JSON基础知识总结

    JSON基础 一.JSON简介 JSON,全称“JavaScript Object Notation(JavaScript对象表示法)”,起源于JavaScript的对象和数组.JSON,说白了就是J ...

  4. json基础

    1 xml缺点 用xml表示一个对象,数据存储效率低 <person> <firstName>Morra<firstName> <lastName>Do ...

  5. JSONObject.fromObject(map)(JSON与JAVA数据的转换)

    JSON与JAVA数据的转换(JSON 即 JavaScript Object Natation,它是一种轻量级的数据交换格式,非常适合于服务器与 JavaScript 的交互.) 上一篇文章中有这么 ...

  6. java基础---->java中正则表达式二

    跟正则表达式相关的类有:Pattern.Matcher和String.今天我们就开始Java中正则表达式的学习. Pattern和Matcher的理解 一.正则表达式的使用方法 一般推荐使用的方式如下 ...

  7. json学习系列(8)JSON与JAVA数据的相互转换实例

    一.完整案例 先定义一个java实体对象,如下: package com.pcitc.json.cnblog; /** * SimInfo实体对象 * * @Description * @author ...

  8. JSON 与JAVA对象之间的转换(转)

    JSON与XML两者目前在数据交互方面都有很高的使用率,随着现在SOA的兴起,异构系统的整合地位相应提高,本篇文章主要介绍JSON与JAVA对象之间的相互转换. 一.对普通类型的JSON模式的转换 一 ...

  9. net.sf.json.JSONException: java.lang.NoSuchMethodException

    在尝试将json对象转换为list时候出现了如下错误 Exception in thread "main" net.sf.json.JSONException: java.lang ...

随机推荐

  1. 坑人的toLocaleDateString和简单地跳坑方式

    最近在做一个一个医学大数据的项目的时候,独立设计.构思.制作了完成了一个生命历程图的功能.既然设计到时间,那就免不了对Date对象进行一系列的操作,也就免不了对日期对象进行一系列的格式化.走的路多了, ...

  2. 【视频教程】一步步将AppBox升级到Pro版

    本系列教程分为上中下三部分,通过视频的形式讲解如何将基于FineUI(开源版)的AppBox v6.0一步一步升级FineUIPro(基础版). [视频教程]一步步将AppBox升级到Pro版(上)主 ...

  3. Android开发Toast Notifications

    Android开发Toast Notifications 关键类 Toast toast通知是一种在窗口表面弹出的消息.它只占用信息显示所需的空间,用户当前的activity仍保持可见并可交互.该通知 ...

  4. Xmind8 Pro安装教程 Windows

      xmind是一款优秀的思维导图制作软件,这一点相信不用太多解释. 尤其作为测试人员导出测试用例为excel极其方便.网上xmind的破解方法加自己琢磨,重新整理了破解步骤. 亲测可以永久激活截止2 ...

  5. 经典卷积神经网络(LeNet、AlexNet、VGG、GoogleNet、ResNet)的实现(MXNet版本)

    卷积神经网络(Convolutional Neural Network, CNN)是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出色表现. 其中 文章 详解卷 ...

  6. Java中的a++和++a的区别

    1.a++和++a的区别 a++表示先将a放在表达式中运算,然后再加1: ++a表示先将a加1,然后再放在表达式中运算 2.实例 (1)Java代码 /** * @Title:JiaJia.java ...

  7. (二十七)mongodb操作学习

    在不使用mongodbVUE图形界面工具的情况下,打开数据库和集合后,如果要:    插入一条字段名为name,内容为java的记录,可以写成x={name:"java"};,然后 ...

  8. 通过回调函数的理解来进一步理解ajax及其注意的用法

    一,再一次理解回调函数 (function($){ $.fn.shadow = function(opts){ //定义的默认的参数 var defaults = { copies: 5, opaci ...

  9. 前端(HTML/CSS/JS)-HTML编码规范

    一.HTML编码规范 1. img标签要写alt属性 根据W3C标准,img标签要写alt属性,如果没有就写一个空的.但是一般要写一个有内容的,根据图片想要表达的意思,因为alt是在图片无法加载时显示 ...

  10. 【CF245H】Queries for Number of Palindromes(回文树)

    [CF245H]Queries for Number of Palindromes(回文树) 题面 洛谷 题解 回文树,很类似原来一道后缀自动机的题目 后缀自动机那道题 看到\(n\)的范围很小,但是 ...