zoukankan      html  css  js  c++  java
  • 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后台的操作

    推荐:


  • 相关阅读:
    【干货】国外程序员整理的 C++ 资源大全–日常工作,我觉得用处确实很大,所以分享
    android实例 listview与sqlite数据绑定
    Android整理:SQlite数据库的使用以及通过listView显示数据
    Android之SimpleAdapter简单实例和SimpleAdapter参数说明
    LinearLayout里面的空间居中对齐
    context.startActivity(Intent intent)方法启动activity
    Context.startActivity出现AndroidRuntimeException
    ListFragment 使用ListView and 自定义Adapter
    匿名类型
    元组Tuple
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/5172209.html
Copyright © 2011-2022 走看看