• FastJson的使用


    JSON是什么:

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。

    JSON用于描述数据结构,有以下形式存在。

    • 对象(object):一个对象以“{”开始,并以“}”结束。一个对象包含一系列非排序的名称/值对,每个名称/值对之间使用“,”分区。
    • 名称/值(collection):名称和值之间使用“:”隔开,一般的形式是:
      {name:value}
    • 一个名称是一个字符串; 一个值可以是一个字符串,一个数值,一个对象,一个布尔值,一个有序列表,或者一个null值。
    • 值的有序列表(Array):一个或者多个值用“,”分区后,使用“[”,“]”括起来就形成了这样的列表,形如:
      [collection, collection]
    • 字符串:以""括起来的一串字符。
    • 数值:一系列0-9的数字组合,可以为负数或者小数。还可以用“e”或者“E”表示为指数形式。
    • 布尔值:表示为true或者false。在很多语言[哪个/哪些?]中它被解释为数组。

    Java对JSON的处理

    Java支持对Json的库有:google-gson,FastJson,JackSon等等。我挑选了fastjson来实现java对json的处理。

    FastJSON

    • JSON.parseArray(jsonData, String.class)把JSON数据转换成普通字符串列表
    • JSON.parseObject(jsonData, clazz)把JSON数据转换成指定的java对象
    • JSON.toJSONString(object)把java对象转换成JSON数据
    • JSON.parseArray(jsonData, clazz)把JSON数据转换成指定的java对象列表
    • JSON.parseObject(jsonData, new TypeReference<List<Map<String, Object>>>() { })
      把JSON数据转换成较为复杂的java对象列表
      {% highlight java %}
      package chest.treasure.json.util.fastjson;

    import java.util.Iterator;
    import java.util.List;
    import java.util.Map;

    import org.junit.Test;

    import chest.treasure.json.util.fastjson.domain.SysMenu;

    import com.alibaba.fastjson.JSON;
    import com.alibaba.fastjson.JSONArray;
    import com.alibaba.fastjson.JSONObject;
    import com.alibaba.fastjson.TypeReference;

    public class FastJsonDemo {
    @Test
    public void parseString() {
    StringBuffer sb = new StringBuffer();

    	sb.append("[");
    		sb.append("{");
    			sb.append("'weixin'").append(":").append("'simple'").append(",");
    			sb.append("'qq'").append(":").append("'249661143'").append("");
    		sb.append("}");
    		sb.append(",");
    		sb.append("{");
    			sb.append("'weixin'").append(":").append("'pleasures'").append(",");
    			sb.append("qq").append(":").append("'827632093'").append("");
    		sb.append("}");
    	sb.append("]");
    	
    	String jsonStr = sb.toString();
    	
    	//转换成jsonArray,能够通过iterator遍历,转换的一定要带有[]其实的json串
    	JSONArray jarr = JSONArray.parseArray(jsonStr);
    	for(Iterator<Object> iterator = jarr.iterator();iterator.hasNext();) {
    		JSONObject job = (JSONObject)iterator.next();
    		String weixin = job.getString("weixin").toString();
    		System.out.println(weixin);
    	}
    	
    	//把JSON数据转换成普通字符串列表,也可以是指定类
    	List<String> listList = JSON.parseArray(jsonStr, String.class);
    	System.out.println(listList);
    

    // 把JSON数据转换成较为复杂的java对象列表
    List<Map<String, Object>> parseObject = JSON.parseObject(jsonStr,
    new TypeReference<List<Map<String, Object>>>() {
    });
    System.out.println(parseObject);

    }
    
    @Test
    public void parseEntity() {
    	SysMenu sysMenu = new SysMenu();
    	sysMenu.setMenuId(123456789);
    	sysMenu.setMenuDescription("我了个去");
    	
    	SysMenu sysMenuParent = new SysMenu();
    	sysMenuParent.setMenuId(1122);
    	sysMenuParent.setMenuDescription("wo qu ");
    	sysMenuParent.getSmLists().add(sysMenu);
    	sysMenuParent.getSmLists().add(sysMenuParent);
    

    // 把java对象转换成JSON数据
    String jsonStr= JSON.toJSONString(sysMenuParent);
    System.out.println("jsonStr:---"+jsonStr);

    	StringBuffer sb = new StringBuffer(jsonStr);
    	sb.insert(0, "[");
    	sb.insert(sb.length(), "]");
    	
    	JSONArray parseArray = JSONArray.parseArray(sb.toString());
    	for(Iterator iter = parseArray.iterator();iter.hasNext();) {
    		System.out.println("###"+iter.next());
    	}
    	
    	//解析json字符串成object类,object中存在的为类似一个map
    	Object object = JSONObject.parse(jsonStr);
    	System.out.println("object:---"+object);
    	
    	//把JSON数据转换成指定的java对象
    	SysMenu temp = JSON.parseObject(jsonStr, SysMenu.class);
    	System.out.println("Description:---"+temp.getMenuDescription());
    	System.out.println("SmLists:---"+temp.getSmLists());
    }
    

    }

    {% endhighlight %}

    参考:

  • 相关阅读:
    为什么使用C#开发软件的公司和程序员都很少?
    使用Redis之前5个必须了解的事情
    这段代码为什么捕获不到异常呢?谁能给个解释,谢谢。
    git报错
    C# 常用类库(字符串处理,汉字首字母拼音,注入攻击,缓存操作,Cookies操作,AES加密等)
    你所不知道的 CSS 负值技巧与细节
    CSS 属性选择器的深入挖掘
    探秘 flex 上下文中神奇的自动 margin
    CSS 火焰?不在话下
    不可思议的纯 CSS 实现鼠标跟随效果
  • 原文地址:https://www.cnblogs.com/alcc/p/9201894.html
Copyright © 2020-2023  润新知