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 list = new ArrayList();

list.add("Jack");

list.add("Rose");

json = JSONArray.fromObject(list);

System.err.println(json);

//使用set

Set set = new HashSet();

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:

 

  

 

 

 

 

 

 

]>

 

  张三

  JavaSE

  100

 

   

  李四

  Oracle

  98

 

 

 

读取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

   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

    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表示中国部分省市数据如下:

    中国

    

        黑龙江

        

            哈尔滨 大庆

        

    

    

        广东

        

            广州 深圳  珠海

        

    

   

 

 

JSON表示如下:

{

    "name": "中国",

    "province": [{

        "name": "黑龙江",

        "cities": {

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

        }},

      {

        "name": "广东",

        "cities": {

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

        }}

    ]

}

 

 

JSON 的语法:

JSON 语法是 JavaScript 语法的子集。

          数据在名称/值对中

          数据由逗号分隔

          大括号保存对象

          中括号保存数组

JSON 名称/值对

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

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

 

Json<span style="font-family:'宋体';">练习</span><span style="font-family:Calibri;">

JavaScript 创建 JSON 对象

网站名称:

网站地址:

网站 slogan:

 

  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,您可以创建一个对象数组,并像这样进行赋值:

   例子:

通过 JSON 字符串来创建对象

First Name:

 

 

 

 

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页面;

   

提交" value="提交" οnclick="add()">

 

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 map = new HashMap();  

       /**

        * 解析来自前端页面的值,解析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

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

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

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

}

    /**

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

     */

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

out.flush();

out.close();

}

 

 

       

 

你可能感兴趣的:(json,json传值)