Json for Java API学习

Json for Java API学习首先声明:本文来个很多网友的博客,我通过参考了他们的博客,大致的了解了一些项目中常用的Jsoninjava类和方法,以及关于json的个人理解个人对json的一些简单理解在最近的学习中,查阅了很多资料,了解了一些关于json的基本知识,下面做一个简单的总结:json是什么没有.json结尾的这种文件,json(JavaScriptObjectNotation)是一种简单的

大家好,又见面了,我是你们的朋友全栈君。

首先声明:本文来个很多网友的博客,我通过参考了他们的博客,大致的了解了一些项目中常用的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/
Json for Java API学习
Json for Java API学习

2.Array

这个就类似于数组吧,所以很多时候我们都把json叫做就json数组,
这里是以[开始的,以]结束的,中间的value用逗号隔开
比如:[“value1” , “value2” , “value3”]
官方的给的图解是:
Json for Java API学习
Json for Java API学习
json数组中的value可以是很多种数据类型的值,官方给了如下图解
Json for Java API学习
Json for Java API学习
这里的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后台的操作

推荐:


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/134615.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • TextBox为密码框赋值技巧

    TextBox为密码框赋值技巧当TextBox类型为密码框时,用普通的赋值方法(txtB1.Text=”abc”)是行不通的,TextBox是不会显示出内容的 应该采取:txtB1.Attributes.Add(“value”,”abc”),此时页面才会将“abc”以*号的形式显示出来。

    2022年7月24日
    7
  • emwin 汉字_emwin 弹出效果

    emwin 汉字_emwin 弹出效果emWin—显示汉字最近接触了emWin,需要做一个简单的界面,尝试在基于stm32f429的触摸屏上显示汉字,根据例程里面的操作,字库取模得到了C文件,添加到keil工程里面,最后在触摸屏上却没有显示任何汉字,对于emWin界面的程序结构一脸懵,最后发现有些小细节没有注意。1.字库取模①首先创建一个.txt文本文档,把需要显示的汉字添加进去,然后选择另存。②打开软件FontCvt,生成…

    2022年10月14日
    3
  • ios学习7_iPhone屏幕尺寸、分辨率及适配[通俗易懂]

    ios学习7_iPhone屏幕尺寸、分辨率及适配[通俗易懂]1.iPhone尺寸规格设备iPhone宽Width高Height对角线Diagonal逻辑分辨率(point)ScaleFactor设备分辨率(pixel)PPI3GS2.4inches

    2022年5月14日
    43
  • ubuntu20.04安装edge浏览器

    ubuntu20.04安装edge浏览器下载地址:www.microsoftedgeinsider.com/zh-cn/download/?platform=linux-deb下载链接是:https://packages.microsoft.com/repos/edge/pool/main/m/microsoft-edge-dev/microsoft-edge-dev_88.0.705.9-1_amd64.deb安装命令:dpkg-imicrosoft-edge-dev_88.0.705.9-1_amd64.deb..

    2022年7月21日
    17
  • idea tomcat localhost log 乱码_idea tomcat 乱码

    idea tomcat localhost log 乱码_idea tomcat 乱码解决idea日志乱码和tomcat日志乱码问题1idea启动tomcat乱码遇到的问题:idea整合SSM项目,tomcat启动,启动时查看idea上的tomcat日志,出现乱码:但是直接用tomcat的startup.bat启动,无乱码:出现的原因:查看tomcat/conf/logging.propertiesjava.util.logging.ConsoleHandler.encoding=GBK而本window系统使用的也是GBK编码,所以直接使用bat文件启动正常,

    2022年9月26日
    4
  • 如何删除sqlserver实例_sql server删除表

    如何删除sqlserver实例_sql server删除表在网上找到下面几种方法,本人使用的是第一种,很实用。1.删除SQLServer的特定实例若要删除SQLServer的某个特定实例,请按照以下步骤操作:找到并删除%drive%:\\ProgramFiles\\MicrosoftSQLServer\\MSSQL\\Binn文件夹,其中%drive%是要删除的SQLServer实例的位置。找到以下注册表项:HKEY…

    2022年10月2日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号