json入门教程+在java中的一些便捷操作

本文详细介绍了JSON(JavaScript Object Notation)数据交换格式,包括其结构特点和在JavaScript中的表现形式。同时,文章通过示例展示了在Java中如何将JSON转换为Java对象以及数组,并提供了相关代码实现。
摘要由CSDN通过智能技术生成

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,非常适合于服务器与 JavaScript的交互。相比XML,他更易于人阅读和编写,它是JavaScript的一个子集。 JSON采用完全独立于语言的文本格式,可以在流行的语言中使用,比如C# Java C++ VB。这些特性使JSON成为理想的数据交换语言。

一、Json的构建结构

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

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

这些都是常见的数据结构。事实上大部分现代计算机语言都以某种形式支持它们。这使得一种数据格式在同样基于这些结构的编程语言之间交换成为可能。

二、JSon具体表现形式

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

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

3、值(value)可以是双引号括起来的字符(string)、数值(number)、true、false、 null、对象(object)或者数组(array)。这些结构可以嵌套。

4、字符串(string)是由双引号包围的任意数量Unicode字符的集合,使用反斜线转义。

一个字符(character)即一个单独的字符串(character string)。字符串(string)与C或者Java的字符串非常相似。

5、数值(number)也与C或者Java的数值非常相似。除去未曾使用的八进制与十六进制格式。除去一些编码细节。

在javascript中

<script type="text/javascript">
var json = "{name:'jack', age:20, city:{address:'北京市',street:'朝阳区'}}";
alert(json.name);
alert(json.age);
alert(json.city.address + json.city.street);
</script>

大家可以自己试试看!

三、JSon在Java中应用

废话不说直接上代码!!这里我用的Junit做的测试,如果不懂的童鞋可以学习一下,我的演示相对简单。

package com.jelly.json.test;

import static org.junit.Assert.assertEquals;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import net.sf.ezmorph.object.DateMorpher;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import net.sf.json.util.JSONUtils;

import org.apache.commons.beanutils.PropertyUtils;
import org.junit.Test;

import com.jelly.json.entity.MyBean;
import com.jelly.json.entity.Person;
import com.jelly.json.entity.Student;

@SuppressWarnings("unchecked")
public class JsonTest {

private static void setDataFormat2JAVA(){
//设定日期转换格式
JSONUtils.getMorpherRegistry().registerMorpher(new DateMorpher(new String[] {"yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss"}));
} 

    //json转成Object
    @Test
    public void testJsonToObj(){
    String json = "{id:'1001',name:'张三',age:22}";
        Student stu = null;
        setDataFormat2JAVA();
        JSONObject obj = JSONObject.fromObject(json);
        stu = (Student)JSONObject.toBean(obj, Student.class);
        System.out.println(stu);
    }
    
    //从一个JSON数组得到一个java对象数组
    @Test
    public void testJsonArrToArray(){
    String jsonStus = "[{id:1,name:'jack',age:20},{id:2,name:'rose',age:20},{id:3,name:'admin',age:20}]";
    JSONArray array = JSONArray.fromObject(jsonStus);
    Student[] stu = new Student[array.size()];
    for(int i = 0; i < array.size(); i++){
    JSONObject jsonObject = array.getJSONObject(i);
    stu[i] = (Student)JSONObject.toBean(jsonObject, Student.class);
    }
    System.out.println(stu[0]);
    System.out.println(stu[1]);
    System.out.println(stu[2]);
    //System.out.println(stu[3]);会报错
    }
    
    //从一个JSON数组得到一个java集合
    @Test
    public void testJsonArrToList(){
    String jsonStus = "[{id:1,name:'jack',age:20},{id:2,name:'rose',age:20},{id:3,name:'admin',age:20}]";
    JSONArray array = JSONArray.fromObject(jsonStus);
    List<Student> stu = new ArrayList<Student>();
    for(int i = 0; i < array.size(); i++){
    JSONObject jsonObject = array.getJSONObject(i);
    stu.add((Student)JSONObject.toBean(jsonObject, Student.class));
    }
    System.out.println(stu.get(0));
    System.out.println(stu.get(1));
    System.out.println(stu.get(2));
    }
    //从json数组中得到相应java数组 
    @Test
    public void testArrayForJson(){
    String jsonString = "['q','c','d']";
    JSONArray jsonArray = JSONArray.fromObject(jsonString);
    Object[] strs = jsonArray.toArray();
        System.out.print(strs[0]);
        System.out.print(strs[1]);
        System.out.print(strs[2]);
    }
    
    //字符串转换成json
    @Test
    public void testJsonStrToJSON(){
    String json = "['json','is','easy']";
        JSONArray jsonArray = JSONArray.fromObject( json );  
        System.out.println( jsonArray );  
        // prints ["json","is","easy"]  
    }
    
    //Map转换成json
    @Test
    public void testMapToJSON(){
        Map map = new HashMap();  
        map.put( "name", "jack" );  
        map.put( "bool", Boolean.TRUE );  
        map.put( "int", new Integer(1) );  
        map.put( "arr", new String[]{"a","b"} );  
        map.put( "func", "function(i){ return this.arr[i]; }" );  
        
        JSONObject jsonObject = JSONObject.fromObject( map );  
        System.out.println( jsonObject );
    }
    
    //java对象转换为json格式
    @Test
    public void testObjToJson(){
    JSONObject obj2=new JSONObject();
    obj2.put("phone","123456");
    obj2.put("zip","7890");
    obj2.put("contact",obj2);
    System.out.print(obj2);
    }
    
    //复合类型bean转成成json
    @Test
    public void testBeadToJSON(){
        MyBean bean = new MyBean();
        bean.setId("001");
        bean.setName("银行卡");
        bean.setDate(new Date());
        
        List cardNum = new ArrayList();
        cardNum.add("农行");
        cardNum.add("工行");
        cardNum.add("建行");
        cardNum.add(new Person("test"));
        
        bean.setCardNum(cardNum);
        
        JSONObject jsonObject = JSONObject.fromObject(bean);
        System.out.println(jsonObject);
        
    }
    
    //一般数组转换成JSON
    @Test
    public void testArrayToJSON(){
        boolean[] boolArray = new boolean[]{true,false,true};  
        JSONArray jsonArray = JSONArray.fromObject( boolArray );  
        System.out.println( jsonArray );  
    }
    
    //Collection对象转换成JSON
    @Test
    public void testListToJSON(){
        List list = new ArrayList();  
        list.add( "first" );
        list.add( "second" );
        JSONArray jsonArray = JSONArray.fromObject( list );  
        System.out.println( jsonArray );  
        // prints ["first","second"]  
    }
    
    //普通类型的json转换成对象
    @Test
    public void testJsonToObject() throws Exception{
        String json = "{name=\"json\",bool:true,int:1,double:2.2,func:function(a){ return a; },array:[1,2]}";  
        JSONObject jsonObject = JSONObject.fromObject( json ); 
        System.out.println(jsonObject);
        Object bean = JSONObject.toBean( jsonObject ); 
        assertEquals( jsonObject.get( "name" ), PropertyUtils.getProperty( bean, "name" ) );  
        assertEquals( jsonObject.get( "bool" ), PropertyUtils.getProperty( bean, "bool" ) );  
        assertEquals( jsonObject.get( "int" ), PropertyUtils.getProperty( bean, "int" ) );  
        assertEquals( jsonObject.get( "double" ), PropertyUtils.getProperty( bean, "double" ) );  
        assertEquals( jsonObject.get( "func" ), PropertyUtils.getProperty( bean, "func" ) );  
        System.out.println(PropertyUtils.getProperty(bean, "name"));
        System.out.println(PropertyUtils.getProperty(bean, "bool"));
        System.out.println(PropertyUtils.getProperty(bean, "int"));
        System.out.println(PropertyUtils.getProperty(bean, "double"));
        System.out.println(PropertyUtils.getProperty(bean, "func"));
        System.out.println(PropertyUtils.getProperty(bean, "array"));
        
        List arrayList = (List)JSONArray.toCollection(jsonObject.getJSONArray("array"));
        for(Object object : arrayList){
            System.out.println(object);
        }
        
    }
    
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

枫叶思念

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值