Json

最近在学习Json相关的东西,下面将我的所学进行分享

Json(JavaScript Object Notation) 是一种轻量级的数据交换格式,非常适合于服务器与 JavaScript的交互。相比XML,他更易于人阅读和编写,它是JavaScript的一个子集。 Json采用完全独立于语言的文本格式,可以在流行的语言中使用,比如Java 、C++ 、Python。这些特性使Json成为理想的数据交换语言。更多详细信息请参考Json官网http://json.org

以上是官网的翻译,下面说说我对Json作用的简单理解:不同语言、不同平台之间所使用的数据格式是不同的,但是不同的人往往也只擅长使用某种语言或者平台,并且希望该种语言的数据可以在别的语言上使用,这样就需要一种中介来进行数据格式转换,转成在任何一种语言或者平台上都可以使用的数据,json就是这种中介。举个例子:C++的数据转成json形式,然后json形式再转成Java数据。这样C++的结果就可以在Java中使用。

json的数据结构:

一、json有两种数据结构,分别是键值对集合,值得有序列表(即数组)

1.“键/值”对的集合(A collectionof name/value pairs)。不同的语言中,它被理解为对象(object),记录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组(associativearray)。

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


2. 值的有序列表(An orderedlist of values)。在大部分语言中,它被理解为数组(array)。

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


二、简单说明

string即字符串,和常见语言中的字符串基本一样

value即值,可以是对象、数组、字符串、数值


三、使用例子

Java中使用json


使用JSON中的JSONObject:

1.创建一个JSONObject对象,并使用put();方法添加元素:

首先我们创建一个User对象以备后用:

 

public class User {

 private int id;

 private String name;

 private String pwd;

 private String sex;

 //get,set方法

 @Override

 //重写他的toString方法

 public String toString() {

  return this.name+"--"+this.pwd+"--"+this.sex;

 }

}

例子如下:

 

import net.sf.json.JSONObject;

public class TestJson {

 private static JSONObject json = null;

         publicstatic void main(String[] args) {

                   json= new JSONObject();

                   json.put("id","1");

                   json.put("name","张三");

                   json.put("pwd","123456");

                   System.out.println(json);

         }

}

运行:

C:\java>java TestJson

{"id":"1","name":"张三","pwd":"123456"}

 

通过这段代码我们就能很清淅的看到他的添加元素和map集合方式一样。

现在我们要将这个json对象放进一个JAVABEAN的User对象怎么弄呢?很简单

我们须要在 TestJson 类中的主方法中加入(放在System.out.println(json)这句话后面)

 

User user = new User();

user.setId(Integer.parseInt(json.getString("id")));

 

//json.getString("id")就是通过他的KEY值取得对应的value值

user.setName(json.getString("name"));

user.setPwd(json.getString("pwd"));

System.out.println(user);

 

这样我们就把json这个对象里的值放进user对象里面了。

运行:

C:\java>java TestJson

{"id":"1","name":"张三","pwd":"123456"}

张三--123456--null

 

json添加元素除了用put();方法之外还可以用element();如:json.element("11","222");

 

2.创建一个JSONArray对象,并添加元素:

 

JSONArray添加元素和list集合一样,当然取值也很像,代码如下

import net.sf.json.*;

public class TestJson1 {

 private static JSONObject json = null;

 private static JSONArray  jsonArray = null;

 public static void main(String[] args) {

      jsonArray = new JSONArray ();

      jsonArray.add(0, "张三");

      jsonArray.add(1, "李四");

      jsonArray.add(2, "王五");

      jsonArray.add(3, "小三");

      System.out.println(jsonArray);

      System.out.println(jsonArray.get(1)); 

   }

 }

输出结果为:

["张三","李四","王五","小三"]

李四

 

注:json的基本格式这些网上很多,就不多说了,我们只须记住一句话就行了:[]表示数组,{}表示对象就完了!

 

 

1.从Object到String

 要先用Object对象构造一个JSONObject或者JSONArray对象,然后调用它的toString()方法即可

(1)示例一

 Bookbook=new Book();

 book.setName("Java");

 book.setPrice(52.3f);

 JSONObject object=JSONObject.fromObject(book);

 System.out.println(object.toString());

(2)示例二

        Book book=new Book();

        book.setName("Java");

        book.setPrice(52.3f);

        

        Book book2=new Book();

        book2.setName("C");

        book2.setPrice(42.3f);

        List list=new ArrayList();

        list.add(book);

       list.add(book2);

       JSONArray arry=JSONArray.fromObject(list);

       System.out.println(arry.toString());

 //结果如下:

 [{"name":"Java","price":52.3},{"name":"C","price":42.3}]

2.从String到Object

 要先用String对象构造一个JSONObject或者JSONArray对象

(1)示例一

 Stringjson="{name:'Java',price:52.3}";   

 JSONObject object=JSONObject.fromObject(json);

 System.out.println(object.get("name")+""+object.get("price"));

 

 (2)示例二

 Stringjson="[{name:'Java',price:52.3},{name:'C',price:42.3}]";

 JSONArray array=JSONArray.fromObject(json);

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

    Map o=(Map)array.get(i);

    System.out.println(o.get("name")+""+o.get("price"));

 }

3.从String到Bean

(1)单个Bean对象

        String json="{name:'Java',price:52.3}";

        JSONObject object=JSONObject.fromObject(json);

        Product product=(Product)JSONObject.toBean(object,Product.class);

        System.out.println(product.getName()+" "+product.getPrice());

                    

(2).Bean的数组

        Stringjson="[{name:'Java',price:52.3},{name:'C',price:42.3}]";

        JSONArray array=JSONArray.fromObject(json);

        Product[] products=(Product[]) JSONArray.toArray(array,Product.class);

        for(Product p:products){

            System.out.println(p.getName()+" "+p.getPrice());

        }

自定义封装JSON操作的类

 package com.util;

 

 import java.util.List;

 import java.util.Map;

 

 import net.sf.json.JSONArray;

 import net.sf.json.JSONObject;

 

 public class JsonHelper {

    //从普通的Bean转换为字符串

          public static String getJson(Object o){

        JSONObject jo=JSONObject.fromObject(o);

        return jo.toString();

    }

    //从Java的列表转换为字符串

          public static String getJson(List list){

        JSONArray ja=JSONArray.fromObject(list);

        return ja.toString();

    }

    //从Java对象数组转换为字符串

          public static String getJson(Object[] arry){

        JSONArray ja=JSONArray.fromObject(arry);

        return ja.toString();

    }

          

    //从json格式的字符串转换为Map对象

               public static Map getObject(String s){

        return    JSONObject.fromObject(s);

    }

          

          

    //从json格式的字符串转换为List数组

          

          public static List getArray(String s){

        return JSONArray.fromObject(s);

    }

    //从json格式的字符串转换为某个Bean

           public static Object getObject(String s,Classcls){

        JSONObject jo=JSONObject.fromObject(s);

       return JSONObject.toBean(jo, cls);

    }

    //从json格式的字符串转换为某类对象的数组

          public static Object getArray(String s,Classcls){

        JSONArray ja=JSONArray.fromObject(s);

        return JSONArray.toArray(ja, cls);

    }

 }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值