Json的基础到传值

JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。它基于 ECMAScript (w3c制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。JSON 是轻量级的文本数据交换格式

 

   JSON 使用 Javascript语法来描述数据对象,但是 JSON 仍然独立于语言和平台。JSON 解析器和 JSON 库支持许多不同的编程语言。 目前非常多的动态(JSPPHP.NET)编程语言都支持JSON.

 

JSON建构于两种结构-1

 

名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。 在Java语言中,我们可以将它理解成HashMap.

对象是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔。

示例:var json = {name:Jack,age:90,Marray:true};

 

 

JSON建构于两种结构-2

 

 

值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(arrayList)。

 数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔。

 

 

示例:var json = [Jack,Rose,Tom,89,true,false];

 

 

JSON的解析:

 

SON的解析分成两种情况:

   Object/Array解析成JSON字符串,这种情况一般用于响应用户的输出。

    Json串解析成Object或是Array,这种情况一般用于服务器接收到了用户请求的JSON串。

目前比较流行的解析工具为:

  json-lib

  fastjson.

 

 

 

使用json-lib解析:

 

 

准备jar包: (可以从struts2的包中找到他们,因为struts2用它)

   commons-beanutils.jar

  commons-collections-3.1.jar

  commons-lang-2.3.jar

  commons-logging.jar

  ezmorph-1.0.4.jar

  json-lib-2.3-jdk15.jar-这是json-lib的核心包,上面都是它的依赖包

 

 

 

public class TestJson {

public static void main(String [] a){

//array解析成json

String[] str = {"Jack","Tom","90","true"};

JSONArray json = JSONArray.fromObject(str);

System.err.println(json);

//对像数组,注意数字和布而值

Object[] o = {"北京","上海",89,true,90.87};

json = JSONArray.fromObject(o);

System.err.println(json);

//使用集合类

List<String> list = new ArrayList<String>();

list.add("Jack");

list.add("Rose");

json = JSONArray.fromObject(list);

System.err.println(json);

//使用set

Set<Object> set = new HashSet<Object>();

set.add("Hello");

set.add(true);

set.add(99);

json = JSONArray.fromObject(set);System.err.println(json);}}

 

 

 

使用JsonConfig过虑属性:适用于JavaBean

 

 

public static void main(String [] a){

JsonConfig jc = new JsonConfig();

//指定转换时,不包含那些属性

jc.setExcludes(new String[]{"name"});

Person p = new Person("A001","Tom");

JSONObject jo = JSONObject.fromObject(p,jc);

System.out.println(jo);

}

 

 

Person:

 

 

public class Person {

String id;

String name;

public String getId() {

return id;}

public void setId(String id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public Person(String id, String name) {

super();

this.id = id;

this.name = name;

}

 

 

Json-lib:

 

json串转换成Array

 

 

public static void main(String [] a){

JSONArray json = JSONArray.fromObject("[\"西安智悦\",\"西安通瀛\",\"西安讯华\"]");

Object o= JSONArray.toArray(json);

System.err.println(o);

System.out.println(Arrays.asList((Object[])o));

}

 

 

复习XML文件:

  XML一般是指可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。

 

XML文件的优点:

 

1XML文档内容和结构完全分离。

2)互操作性强。

3)规范统一。

4)支持多种编码。

5)可扩展性强。

 

scores.xml:

 

  <?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE students [

 <!ELEMENT students (student+)>

 <!ELEMENT student (name,course,score)>

 <!ATTLIST student id CDATA #REQUIRED>

 <!ELEMENT name (#PCDATA)>

 <!ELEMENT course (#PCDATA)>

 <!ELEMENT score (#PCDATA)>

]>

<students>

 <student id="11">

  <name>张三</name>

  <course>JavaSE</course>

  <score>100</score>

 </student>

 <student id="22">  

  <name>李四</name>

  <course>Oracle</course>

  <score>98</score>

 </student>

</students>

 

 

读取scores.xml

 

 

public class A{

public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {

//0.获取scores.xml路径.scores.xml放在src目录下

//String filepath=A.class.getClassLoader().getResource("score.xml").getPath();

String filepath=Thread.currentThread().getContextClassLoader().getResource("scores.xml").getPath();  

//1.创建DOM解析器工厂  

  DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

  //2.DOM解析器工厂创建DOM解析器

  DocumentBuilder db = dbf.newDocumentBuilder();

  //3.DOM解析器解析文档,生成DOM  

  Document doc = db.parse(filepath);

 

 //4.解析DOM树,获取文档内容(元素 属性 文本)

  //4.1获取根元素scores

  NodeList scoresList = doc.getChildNodes();

  Node scoresNode = scoresList.item(1);

  System.out.println(scoresList.getLength());

  //4.2获取scores中所有的子元素student

  NodeList studentList = scoresNode.getChildNodes();

  System.out.println(studentList.getLength());

  //4.3对每个student进行处理

  for(int i=0;i<studentList.getLength();i++){

   Node stuNode = studentList.item(i);

   //System.out.println(stuNode.getNodeType());

   //输出元素的属性 id

   if(stuNode.getNodeType()==Node.ELEMENT_NODE){

    Element elem =(Element)stuNode;

    String id= elem.getAttribute("id");

    System.out.println("id------>"+id);

   }

   //输出元素的子元素 name course score

   NodeList ncsList = stuNode.getChildNodes();

   //System.out.println(ncsList.getLength() );

   for(int j=0;j<ncsList.getLength();j++){

    Node ncs = ncsList.item(j);

    if(ncs.getNodeType() == Node.ELEMENT_NODE){

      String name = ncs.getNodeName();

      //String value = ncs.getFirstChild().getNodeValue();//文本是元素的子节点,所以要getFirstChild

      String value = ncs.getTextContent();

      System.out.println(name+"----->"+value);

    }    }   }  }}

 

 

 

XML 异同

 

XML 相同之处

         JSON 是纯文本

             JSON 具有"自我描述性"(程序员可读)

             JSON 具有层级结构(值中存在值)

               JSON 可通过 JavaScript 进行解析

             JSON 数据可使用 AJAX 进行传输

     XML 不同之处

          没有结束标签

         更短

         读写的速度更快

         能够使用内建的 JavaScript eval() 方法进行解析

        使用数组

        不使用保留字

 

XMLJSON都使用结构化方法来标记数据,下面来做一个简单的比较。

 

 

XML表示中国部分省市数据如下:

<?xml version="1.0" encoding="utf-8"?>

<country>

    <name>中国</name>

    <province>

        <name>黑龙江</name>

        <cities>

            <city>哈尔滨</city> <city>大庆</city>

        </cities>

    </province>

    <province>

        <name>广东</name>

        <cities>

            <city>广州</city> <city>深圳</city>  <city>珠海</city>

        </cities>

    </province>

   </country>

 

 

JSON表示如下:

{

    "name": "中国",

    "province": [{

        "name": "黑龙江",

        "cities": {

            "city": ["哈尔滨", "大庆"]

        }},

      {

        "name": "广东",

        "cities": {

            "city": ["广州", "深圳", "珠海"]

        }}

    ]

}

 

 

JSON 的语法:

JSON 语法是 JavaScript 语法的子集。

          数据在名称/值对中

          数据由逗号分隔

          大括号保存对象

          中括号保存数组

JSON 名称/值对

          JSON 数据的书写格式是:名称/值对。

         名称/值对包括字段名称(在双引号中),后面写一个冒号,                          然后是值:"firstName" : "John";

 

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<title>Json练习</title>

</head>

<body>

<h2>JavaScript 创建 JSON 对象</h2>

<p>

网站名称: <span id="jname"></span><br />

网站地址: <span id="jurl"></span><br />

网站 slogan: <span id="jslogan"></span><br />

</p>

<script>

var JSONObject= {

"name":"西安通瀛",

"url":"www.51zhjob.com",

"slogan":"学的不仅是技术,更是梦想!"};

document.getElementById("jname").innerHTML=JSONObject.name

document.getElementById("jurl").innerHTML=JSONObject.url

document.getElementById("jslogan").innerHTML=JSONObject.slogan

</script>

</body>

</html>

 

  JSON

     JSON 值可以是:

        数字(整数或浮点数)

       字符串(在双引号中)

       逻辑值(true false

       数组

       对象

      null

JSON 对象

   JSON 对象在花括号中书写:

     对象可以包含多个名称/值对:

     { "firstName":"John" , "lastName":"Doe" }

 

JSON 数组

   JSON 数组在方括号中书写:

       数组可包含多个对象:

      {"employees": [

      { "firstName":"John" , "lastName":"Doe" },

      { "firstName":"Anna" , "lastName":"Smith" },

      { "firstName":"Peter" , "lastName":"Jones" }

       ]}

       在上面的例子中,对象 "employees" 是包含三个对象的数组。每个对象代表一条关于某人(有姓和名)的记录。

JSON 使用 JavaScript 语法

      因为 JSON 使用 JavaScript 语法,所以无需额外的软件就能处理 JavaScript 中的 JSON

     通过 JavaScript,您可以创建一个对象数组,并像这样进行赋值:

   例子:

<html>

<body>

<h2>通过 JSON 字符串来创建对象</h3>

<p>First Name: <span id="fname"></span></p>

 

<script type="text/javascript">

var employees = [

{ "firstName":"Bill" , "lastName":"Gates" },

{ "firstName":"George" , "lastName":"Bush" },

{ "firstName":"Thomas" , "lastName": "Carter" }

];

employees[1].firstName="Jobs";

document.getElementById("fname").innerHTML=employees[1].firstName;

</script>

 

</body>

</html>

 

 

JSON JS 对象互转

要实现从js对象转换为 JSON 字符串,使用 JSON.stringify() 方法:

       var json = JSON.stringify({a: 'Hello', b: 'World'});

         //结果是 '{"a": "Hello", "b": "World"}'

  要实现从 JSON 转换为js对象,使用 JSON.parse() 方法:

     var obj = JSON.parse('{"a": "Hello", "b": "World"}');

          //结果是 {a: 'Hello', b: 'World'}

 

 

 

web中用ajax传递json数据到后台

 

1.首先需要导入几个jsonjar包;

commons-beanutils.jar

  commons-collections-3.1.jar

  commons-lang-2.3.jar

  commons-logging.jar

  ezmorph-1.0.4.jar

  json-lib-2.3-jdk15.jar

2.jsontest.jsp页面;

   <script type="text/javascript" src="js/jquery-1.8.1.js"></script>

<script type="text/javascript">

function add() {

/**

当给个错误的url的时候,就会走到error方法里面,

ajax请求会返回一个status code码,当返回值为200时,表示成功,执行success方法,否则执行error方法;

 */

/* $.ajax({

    cache: true,     type: "POST",     url:"/Ajax/TestServlet",     data:$('#form1').serialize(),// 你的formid

       async: false,     error: function(request) {         alert("提交失败");

    },

    success: function(data) {

       /* $("#commonLayout_appcreshi").parent().html(data);*/

/*    alert(data);

$("#div1").text(data); } }); */

/** 采用json的方式进行数据传递  */

var jsonvalue = { "name" : "丫丫", "id" : 1, "password" : 123456 };

var jsonshuzu = { "name" : [ { "age" : 25, "height" : 160, "weight" : 100, "email" : "1946898935" }, { "age" : 26, "height" : 178, "weight" : 140, "email" : "1234567" } ], "address" : [ { "addressname" : "福州市"

}, { "addressname" : "厦门市" } ] }; alert("走到了add方法里面");

/**

dataType : "json":的意思是从后台返回的值必须为json格式,否则将执行error方法

*/

$.ajax({ cache : true, type : "post", url : "Ajax/TestServlet", data : { "ss" : JSON.stringify(jsonshuzu) }, async: false, error : function(request) { alert("提交失败");

}, success : function(data) { alert("data:" + data); $("#div1").text(data); } }); }</script>

</head>

<body>

<form id="form1">

<!-- 用户名:<input type="text" id="input1" name="username" id="yonghu"></input><br />

密码:<input type="password" name="password" id="mima"></input><br />  -->

<input type="button" name="提交" value="提交" οnclick="add()"></input>

<div id="div1"></div>

</form>

</body>

</html>

 

3.后台接受的代码:

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

response.setContentType("text/html");

response.setCharacterEncoding("utf-8");

System.out.println("到了dopost方法中----------------------------");

PrintWriter out = response.getWriter();

/**

 * 采用request.getParameter("username");获取从页面传来的值时,括号中的参数为页面中name的值

 */

/*String username=request.getParameter("username");

String passwrd=request.getParameter("password");

System.out.println(username+"/"+passwrd);

out.print(username+"/"+passwrd);*/

/**

 * 接受从前端传递过来的json数据,要注意引入解析json的包

 */

String name=request.getParameter("ss");

JSONObject json=JSONObject.fromObject(name);

Iterator iter = json.keySet().iterator();  

       Map<String,String> map = new HashMap<String,String>();  

       /**

        * 解析来自前端页面的值,解析json数组

        */

       while (iter.hasNext()) {  

        String key = (String) iter.next();  

        String value = json.getString(key);  

        System.out.println("key:"+key+",value:"+value);

 map.put(key, value);  

       }

     String value=map.get("name");

     JSONArray jsonArray =JSONArray.fromObject(value);

     System.out.println("长度为:"+jsonArray.size());

          for (int i = 0; i <jsonArray.size(); i++) {

int age=(Integer) jsonArray.getJSONObject(i).get("age");

int height= (Integer) jsonArray.getJSONObject(i).get("height");

int weight= (Integer) jsonArray.getJSONObject(i).get("weight");

String email=(String) jsonArray.getJSONObject(i).get("email");

System.out.println("获取到的值为:"+age+","+height+","+weight+","+email);

}

          String values=map.get("address");

          JSONArray jsonArray2=JSONArray.fromObject(values);

          for (int i = 0; i <jsonArray2.size(); i++) {

String city=(String) jsonArray2.getJSONObject(i).get("addressname");

System.out.println("获取到的城市名为:"+city);

}

    /**

     * 前端页面设置了dataTypejson格式,则后台返回时返回的格式必须为json格式

     */

       out.print("提交成功");

out.flush();

out.close();

}

 

 

       

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用axios库发送POST请求时,可以通过设置请求头的方式将请求体中的JSON数据转化为表单数据进行传值。 首先,需要确保已经在项目中引入了axios库,可以通过npm或者CDN的方式进行引入。 然后,在发送POST请求前,需要对请求头进行配置。使用axios库时,可以通过设置`headers`属性来配置请求头。将请求头中的`Content-Type`设置为`application/x-www-form-urlencoded`,表示要将请求体中的数据转化为表单数据。 接下来,在发送POST请求时,需要将JSON数据转化为URL编码的表单数据。可以使用`URLSearchParams`对象来实现这一转换。首先,将JSON数据转化为字符串,然后用`URLSearchParams`对象进行实例化并传入JSON字符串。最后,通过`toString()`方法将JSON数据转化为URL编码的表单数据格式。 最后,使用axios库发送POST请求时,在配置对象中的`data`属性中传入URL编码的表单数据。这样,发送的请求体中就包含了转化后的表单数据。 下面是一个示例代码: ```javascript import axios from 'axios'; // ... async function postData(jsonData) { try { const formData = new URLSearchParams(JSON.stringify(jsonData)).toString(); const response = await axios.post('your-url', formData, { headers: { 'Content-Type': 'application/x-www-form-urlencoded', }, }); console.log(response.data); } catch (error) { console.error(error); } } postData({ key1: 'value1', key2: 'value2' }); ``` 以上就是使用axios库将JSON数据转化为表单数据进行传值的方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值