Json for Java API学习
来源:互联网 发布:js 进度条的实现原理 编辑:程序博客网 时间:2024/05/16 09:57
首先声明:本文来个很多网友的博客,我通过参考了他们的博客,大致的了解了一些项目中常用的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"));//5alert(eval("x+10"));//20了var str="{}";//花括号内没属性时alert(eval('(' + str + ')'));//弹出:[object Object]alert(eval(str));//弹出:undefinedstr="{name:'hj'}";//花括号内有一个属性alert(typeof eval('(' + str + ')'));//弹出:object,以对象方式返回alert(eval(str));//弹出:hjalert(eval('(' + str + ')').name);//弹出:hjalert(eval(str).name);//弹出:undefinedstr="{name:'hj',age:21}";//花括号内有多个属性时alert(eval('(' + str + ')'));//object对象alert(eval('(' + str + ')').name);//hjalert(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();// 创建book1JSONObject 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");// 创建book2JSONObject 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后台的操作
推荐:
http://www.bejson.com/go.html?u=http://www.bejson.com/xml2json
1 0
- Json for Java API学习
- [学习笔记]JSON for java入门总结
- discuz-ucenter-api-for-java的学习
- ElasticSearch API for JAVA 学习笔记
- ElasticSearch API for JAVA 学习笔记
- Json for Java
- json for java
- JSON-RPC for JAVA
- Json for Java
- json-rpc-for-java
- JSON for java入门
- JSON for java总结
- Java API for XML
- Hbase for Java API
- Appium for java API
- google json API--json to java ojbect
- arcgis api for flex学习
- JSON for java入门总结
- dump core file
- IAAS,PAAS,SAAS
- 石子合并
- MediaPlayer + SurfaceView 来实现 视频播放
- SAE上部署Django1.5
- Json for Java API学习
- NULLIF()函数,CASE函数
- 正则表达式的资源和工具汇集(上)
- [Leetcode] Construct Binary Tree from Preorder and Inorder Traversal
- SQL Server 批量插入数据的两种方法
- SurfaceView + MediaPlayer 实现视频播放功能
- ModifyMenu的用法
- UITextField中复制和粘贴为中文
- poj1159 Palindrome(最长公共子序列)