Json for Java API学习
首先声明:本文来个非常多网友的博客,我通过參考了他们的博客,大致的了解了一些项目中经常使用的Json in java 类和方法,以及关于json的个人理解
个人对json的一些简单理解
在近期的学习中。查阅了非常多资料,了解了一些关于json的基本知识,以下做一个简单的总结:
json是什么
没有.json结尾的这样的文件,json(JavaScript Object Notation)是一种简单的数据交换格式,在此之前我也不知道这个东西事实上没有想象的那么抽象。看看后面的样例会更清晰
json中的数据结构
json中仅仅有两种数据基本结构,一种是MAP。或者叫对象。还有一种是Array
1.Map
类似与java中的Map。这里是以{開始,以}结束,内部object内容是键值对的形势。key:value。中间是:号隔开。不同的object之间用逗号隔开比方:{"name":"hujie" , "age":21}官方给的图解:(http://www.json.org/)
2.Array
这个就类似于数组吧。所以非常多时候我们都把json叫做就json数组,这里是以[開始的,以]结束的,中间的value用逗号隔开比方:["value1" , "value2" , "value3"]
官方的给的图解是:
json数组中的value能够是非常多种数据类型的值,官方给了例如以下图解
这里的string。number等等我想是不须要多解释了,谁实话。这些详细的定时,我能理解,但是没法说出来。
知识点:
1.json并不难理解,简单点理解就是一种数据交换的格式
2.json仅仅有两中结构。一种是object还有一种是array,而且两者能够相互嵌套,{}是对象,[]是数组
json与JavaScript的转换
在javaScript中有一个动态脚本运行函数:eval()。这是一个javaScript的全局对象eval()函数仅仅能接受原生态的字符串作为參数,假设不是字符串,则会原样返回。否则会返回字符串的计算结果(前提是得有结果,没有结果返回null)eval()案例:<script language="javascript" type="text/javascript">
alert(eval("x=10;y=10;x*y;"));//100,当做js脚本运行
alert(eval("2+3"));//5
alert(eval("x+10"));//20了
var str="{}";//花括号内没属性时
alert(eval('(' + str + ')'));//弹出:[object Object]
alert(eval(str));//弹出:undefined str="{name:'hj'}";//花括号内有一个属性
alert(typeof eval('(' + str + ')'));//弹出:object,以对象方式返回
alert(eval(str));//弹出:hj
alert(eval('(' + str + ')').name);//弹出:hj
alert(eval(str).name);//弹出:undefined str="{name:'hj',age:21}";//花括号内有多个属性时
alert(eval('(' + str + ')'));//object对象
alert(eval('(' + str + ')').name);//hj
alert(eval('(' + str + ')').age);//21
//alert(eval(str));//运行时会出错。多个属性时不用小括号运行出错
//花括号{}是用来声明一个对象的,假设须要引用这个对象,那么我们必须加上()。这样才干够,因是声明语句仅仅能运行,并不能够返回
//用()括起来的目的是将声明语句转换成表达式。这样就能够计算表达式的值。并返回
</script>这里指的注意的是,eval运行的脚本,生成的变量,是属于调用eval的那个作用域的
<script language="javascript" type="text/javascript">
eval("var str = '全局';");
function test(){
eval("var str = '局部';");
alert(str);//局部
}
test();
alert(str);//全局
</script>以下讲一下json串和javaScript对象的相互转换吧
json串转换成js对象:
<script language="javascript" type="text/javascript">
var jsonpeople = "[{'name':'hj','age':21},{'name':'darkrake','age':21}]";
var jspeople = eval('('+jsonpeople+')');
alert(jspeople[0].name+":"+jspeople[0].age);
alert(jspeople[1].name+":"+jspeople[1].age);
</script>
json与XML的格式对照
简单对照:
XML:
<peoples>
<people>
<name>hj</name>
<age>21</age>
</people>
<people>
<name>darkrake</name>
<age>21</age>
</people>
</peoples>相应的json串格式:
{
peoples:{
people:[{'name':'hj','age':21},
{'name':'darkrake','age':21}]
}
}来一个略微复杂一点的吧,多层嵌套的:
<address>
<Province>
<ProvinceName>安徽</ProvinceName>
<City>
<CityName>六安</CityName>
<town>金安区</town>
<town>舒城</town>
</City>
<City>
<CityName>合肥</CityName>
<town>肥东</town>
<town>肥西</town>
</City>
</Province>
<Province>
<ProvinceName>北京</ProvinceName>
<City>
<CityName>北京</CityName>
<town>东城区</town>
<town>海淀区</town>
</City>
</Province>
</address>{
"address": {
"Province": [
{
"ProvinceName": "安徽",
"City": [
{
"CityName": "六安",
"town": [
"金安区",
"舒城"
]
},
{
"CityName": "合肥",
"town": [
"肥东",
"肥西"
]
}
]
},
{
"ProvinceName": "北京",
"City": {
"CityName": "北京",
"town": [
"东城区",
"海淀区"
]
}
}
]
}
}
json in Java API经常使用的类以及方法
JSONObject类(往往与JSONArray结合起来用,最经常使用了)
案例:package javaJsonAPI; import org.json.JSONObject; public class JsonArrayTest {
/*
* 表示我没有在官网http://www.json.org/里面找到json的jar包 ,这里我的解决 方案是下载官网提供的源文件*.java
* 项目里面建了一个名为org.json的package,把源文件都导入进去了,事实上和在classpath中导入jar包没有差别
*/
public static void main(String args[]) {
JSONObject jsonObject = new JSONObject("{'name':'DarkRake','age':21}");
System.out.println(jsonObject.get("name"));
System.out.println(jsonObject.get("age"));
}
}JSONArray类
案例:package javaJsonAPI; import org.json.JSONArray; public class JsonArrayTest {
/*
* 表示我没有在官网http://www.json.org/里面找到json的jar包 ,这里我的解决 方案是下载官网提供的源文件*.java
* 项目里面建了一个名为org.json的package,把源文件都导入进去了,事实上和在classpath中导入jar包没有差别
*/
public static void main(String args[]) {
String strs[] = { "one", "two", "three" };
JSONArray myjson = new JSONArray(strs);
for (int i = 0; i < myjson.length(); i++) {
System.out.println(myjson.getString(i));
}
}
}进阶:JSONObject与JSONArray类结合使用
package javaJsonAPI; import org.json.JSONObject; public class JsonArrayTest {
/*
* 表示我没有在官网http://www.json.org/里面找到json的jar包 ,这里我的解决 方案是下载官网提供的源文件*.java
* 项目里面建了一个名为org.json的package,把源文件都导入进去了,事实上和在classpath中导入jar包没有差别
*/
public static void main(String args[]) {
String str = "{\"address\": {\"Province\": {\"ProvinceName\": \"安徽\",\"City\": [{\"CityName\": \"六安\",\"town\": [\"金安区\",\"舒城\"] },{\"CityName\": \"合肥\",\"town\": [\"肥东\",\"肥西\"]}]}}}";
JSONObject jo = new JSONObject(str);
String ProvinceName = jo.getJSONObject("address")//
.getJSONObject("Province").get("ProvinceName").toString();//
System.out.println(ProvinceName);
String cityName = jo.getJSONObject("address").getJSONObject("Province")//
.getJSONArray("City").getJSONObject(0).get("CityName")//
.toString();
System.out.println(" " + cityName);
String town1 = jo.getJSONObject("address").getJSONObject("Province")//
.getJSONArray("City").getJSONObject(0).getJSONArray("town")//
.get(0).toString();
System.out.println(" " + town1);
String town2 = jo.getJSONObject("address").getJSONObject("Province")//
.getJSONArray("City").getJSONObject(0).getJSONArray("town")//
.get(1).toString();
System.out.println(" " + town2);
}
}JSONStringer
->高速构建一个JSON串,并能够写入文件里去
基本方法介绍:JSONStringer是JSONWriter的子类;
JSONStringer一般通过object().key().value().key().value().endObject()进行构造;
JSONString ():构造函数
object()表明開始一个对象,即加入{ ;
endObject()表明结束一个对象。即加入 } ;
array()表明開始一个数组,即加入一个 [ ;
endArray()表明结束一个数组,即加入一个 ] ;
key()表示加入一个key;
value()表示加入一个value;
注意:通过该方法,Object之间的“,”以及Array数组各个value之间的“,”都是自己主动加入的
简单案例:
package javaJsonAPI; import org.json.JSONStringer; public class JsonArrayTest {
/*
* 表示我没有在官网http://www.json.org/里面找到json的jar包 ,这里我的解决 方案是下载官网提供的源文件*.java
* 项目里面建了一个名为org.json的package,把源文件都导入进去了,事实上和在classpath中导入jar包没有差别
*/
public static void main(String args[]) {
JSONStringer js = new JSONStringer();
js.array();
js.object();
js.key("name");
js.value("hj");
js.key("age");
js.value(21);
js.endObject();
js.object();
js.key("name");
js.value("darkrake");
js.key("age");
js.value(21);
js.endObject();
js.endArray();
System.out.println(js.toString());
}
}小综合案例:
package javaJsonAPI; import org.json.JSONArray;
import org.json.JSONObject;
import org.json.JSONStringer; public class JsonArrayTest {
/*
* 表示我没有在官网http://www.json.org/里面找到json的jar包 ,这里我的解决 方案是下载官网提供的源文件*.java
* 项目里面建了一个名为org.json的package。把源文件都导入进去了,事实上和在classpath中导入jar包没有差别
*/
public static void main(String args[]) {
JSONStringer js = new JSONStringer();
// 创建book1
JSONObject book1 = new JSONObject();
book1.put("name", "Java");
JSONArray ja1 = new JSONArray();
String str1[] = { "LiuWANJUN", "XXX" };
ja1.put(str1);
book1.put("author", ja1);
book1.put("price", "¥108");
// 创建book2
JSONObject book2 = new JSONObject();
book2.put("name", "JavaScript");
JSONArray ja2 = new JSONArray();
String str2[] = { "LiSongFeng", "CaoLi" };
ja2.put(str2);
book2.put("author", ja2);
book2.put("price", "¥108");
js.object();
js.key("Book");
js.array();
js.value(book1);
js.value(book2);
js.endArray();
js.endObject();
System.out.println(js.toString());
}
}{
"Book": [
{
"author": [
[
"LiuWANJUN",
"XXX"
]
],
"price": "¥108",
"name": "Java"
},
{
"author": [
[
"LiSongFeng",
"CaoLi"
]
],
"price": "¥108",
"name": "JavaScript"
}
]
}转换成XML即为:
<Book>
<author>LiuWANJUN</author>
<author>XXX</author>
<price>¥108</price>
<name>Java</name>
</Book>
<Book>
<author>LiSongFeng</author>
<author>CaoLi</author>
<price>¥108</price>
<name>JavaScript</name>
</Book>
总结:
1.JSON是一种数据交换的格式,在web项目中具有着广泛的应用。尤其是AJAX一步载入数据。往往都是用json格式的数据,而不是传统的XML;
2.JSON仅仅有两种结构,Object和Array
3.不知道我写的有没有错,我也是參考了别人的学习方案进行学习和理解的,下周有时间。抽出时间学习前段JSON的应用吧,这里写的主要是Java后台的操作
推荐:
Json for Java API学习的更多相关文章
- Java API学习(一) ArrayList源码学习
ArrayList在平常用的还挺多的,用起来十分舒服,顺手.这里来学习一下它的源码. 类定义 下面是类的定义: public class ArrayList<E> extends Abst ...
- Elasticsearch的CRUD:REST与Java API
CRUD(Create, Retrieve, Update, Delete)是数据库系统的四种基本操作,分别表示创建.查询.更改.删除,俗称"增删改查".Elasticsearch ...
- Android(java)学习笔记208:Android中操作JSON数据(Json和Jsonarray)
1.Json 和 Xml JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. JSON采用完全独立于语言的 ...
- Json与Java对象互转之Gson学习
Json与Java对象互转之Gson学习 请尊重他人的劳动成果.转载请注明出处:Json与Java对象互转之Gson学习 我曾在<XML,Object,Json转换之浅析Xstr ...
- Java数据持久层框架 MyBatis之API学习八(Java API详解)
对于MyBatis的学习而言,最好去MyBatis的官方文档:http://www.mybatis.org/mybatis-3/zh/index.html 对于语言的学习而言,马上上手去编程,多多练习 ...
- Java数据持久层框架 MyBatis之API学习七(动态 SQL详解)
对于MyBatis的学习而言,最好去MyBatis的官方文档:http://www.mybatis.org/mybatis-3/zh/index.html 对于语言的学习而言,马上上手去编程,多多练习 ...
- Mybatis学习--Java API
学习笔记,选自Mybatis官方中文文档:http://www.mybatis.org/mybatis-3/zh/java-api.html#directoryStructure 既然你已经知道如何配 ...
- JAVA基础学习-集合三-Map、HashMap,TreeMap与常用API
森林森 一份耕耘,一份收获 博客园 首页 新随笔 联系 管理 订阅 随笔- 397 文章- 0 评论- 78 JAVA基础学习day16--集合三-Map.HashMap,TreeMap与常用A ...
- Android(java)学习笔记151:Android中操作JSON数据(Json和Jsonarray)
1.Json 和 Xml JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. JSON采用完全独立于语言的 ...
随机推荐
- MVCC浅析(转)
在并发读写数据库时,读操作可能会不一致的数据(脏读).为了避免这种情况,需要实现数据库的并发访问控制,最简单的方式就是加锁访问.由于,加锁会将读写操作串行化,所以不会出现不一致的状态.但是,读操作会被 ...
- 13-(1-4)进程管道关于popen(-r-w)及pipe的程序使用实例
#include<unistd.h> #include<stdlib.h> #include<stdio.h> #include<string.h> # ...
- Tomcat设置成NIO时,使用的线程池
设置成NIO时, <Connector port="8088" protocol="org.apache.coyote.http11.Http11NioProtoc ...
- iOS开发 - 应用内打开第三方应用并传值
首先说下这个功能, 应该都有接触过. 比方,你下载了一个电子书,然后选择打开方式的时候,可能会看到你手机中已经安装的阅读类App. 或者,你的QQ收到了某个文件,你也能够选择本地的应用来打开. 那这种 ...
- linux ftp批量上传和下载文件
一.登录ftp 输入 ftp 192.168.1.111 输入用户名:ftpuser 输入密码:aaa123 二.转到目标目录 输入:cd test ----test为文件夹 三.批量上传 输 ...
- C++基础学习笔记----第十四课(new和malloc的区别、单例模式等深入)
本节主要讲new关键字和malloc函数的差别,编译器对构造函数调用的实质,单例模式的实现等. new和malloc的差别 1.malloc和free是C语言的库函数,以字节为单位申请堆空间.new和 ...
- js数组基础整理
首页: 主要整理了一下数组中常用的一些基础知识,代码都是自己手敲,有不对的地方希望能指出,目前只有4篇,后续会不断的增加这一板块. 由于少于100字不能发所以把一些最基本的创建数组也写上. // 创建 ...
- js下firstElementChild firstChild 以及childNodes和children方法
一. <div> <p>123</p> </div> 在上面这段代码中,如果使用以下js代码 var oDiv=document.getElementB ...
- JSP:JAVA Bean在JSP中的运用
目录结构,如图: index.jsp <%@ page language="java" import="java.util.*" pageEncoding ...
- .bash_profile与.bashrc和.profile的区分概念
在Linux系统中配置环境变量相关的文件主要有如下几个,很容易弄混的,这儿简单区分下: /etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.并从/etc/p ...