首先声明:本文来个非常多网友的博客,我通过參考了他们的博客,大致的了解了一些项目中经常使用的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后台的操作