json-smart 使用示例(推荐fastjson)

摘自:http://www.cnblogs.com/zhenjing/p/json-smart.html

地址:https://github.com/alibaba/fastjson

=======================================================

json是一种通用的数据格式。相比与protocal buffer、thrift等数据格式,json具有可读性强(文本)、天生具备良好的扩展性(随意增减字段)等优良特点,利用json作为通讯协议,开发效率更高。当然相较于二进制协议,文本更耗带宽。

json和HTTP协议都是基于文本的,天生的一对。面对多终端的未来,使用Json和HTTP作为前端架构的基础将成为开发趋势。

简介

json-smart官方主页:https://code.google.com/p/json-smart/

特性:https://code.google.com/p/json-smart/wiki/FeaturesTests

性能评测:https://code.google.com/p/json-smart/wiki/Benchmark

Json-smart-API:  http://www.jarvana.com/jarvana/view/net/minidev/json-smart/1.0.9/json-smart-1.0.9-javadoc.jar!/net/minidev/json/package-summary.html

javadoc: https://github.com/u2waremanager/maven-repository/blob/master/net/minidev/json-smart/1.1.1/json-smart-1.1.1-javadoc.jar

使用示例

import net.minidev.json.JSONObject;
import net.minidev.json.JSONValue;
import net.minidev.json.JSONArray;
import net.minidev.json.JSONStyle;
import net.minidev.json.parser.ParseException;

import java.io.UnsupportedEncodingException;
import java.util.*;

/*
 * Home page: http://code.google.com/p/json-smart/
 *
 * compiler:  javac -cp json-smart-1.1.1.jar JsonSmartTest.java
 *
 * Run:       java -cp ./:json-smart-1.1.1.jar JsonSmartTest
 *
 */

public class JsonSmartTest {

    //1. String <==> JsonObject
    public static void DecodingTest() throws ParseException {
        System.out.println("=======decode=======");

        String s="[0,{‘1‘:{‘2‘:{‘3‘:{‘4‘:[5,{‘6‘:7}]}}}}]";
        Object obj=JSONValue.parse(s);
        JSONArray array=(JSONArray)obj;
        System.out.println("======the 2nd element of array======");
        System.out.println(array.get(1));
        System.out.println();

        JSONObject obj2=(JSONObject)array.get(1);
        System.out.println("======field \"1\"==========");
        System.out.println(obj2.get("1"));

        s="{}";
        obj=JSONValue.parse(s);
        System.out.println(obj);                

        s="{\"key\":\"Value\"}";
        // JSONValue.parseStrict()
        // can be use to be sure that the input is wellformed
        obj=JSONValue.parseStrict(s);
        JSONObject obj3=(JSONObject)obj;
        System.out.println("====== Object content ======");
        System.out.println(obj3.get("key"));
        System.out.println();

    }

    public static void EncodingTest() {
        System.out.println("=======EncodingTest=======");

        // Json Object is an HashMap<String, Object> extends
        JSONObject obj = new JSONObject();
        obj.put("name", "foo");
        obj.put("num", 100);
        obj.put("balance", 1000.21);
        obj.put("is_vip", true);
        obj.put("nickname",null);

        System.out.println("Standard RFC4627 JSON");
        System.out.println(obj.toJSONString());

        System.out.println("Compacted JSON Value");
        System.out.println(obj.toJSONString(JSONStyle.MAX_COMPRESS));

        // if obj is an common map you can use:

        System.out.println("Standard RFC4627 JSON");
        System.out.println(JSONValue.toJSONString(obj));

        System.out.println("Compacted JSON Value");
        System.out.println(JSONValue.toJSONString(obj, JSONStyle.MAX_COMPRESS));   

    }

    public static void EncodingTest2() {
        System.out.println("=======EncodingTest2=======");

        // Json Object is an HashMap<String, Object> extends
        JSONObject obj = new JSONObject();
        obj.put("name", "foo");
        obj.put("num", 100);
        obj.put("balance", 1000.21);
        obj.put("is_vip", true);
        obj.put("nickname",null);

        //Output Compressed json
        Object value = obj;
        String com_json = JSONValue.toJSONString(value, JSONStyle.MAX_COMPRESS);
        String json = JSONValue.toJSONString(value, JSONStyle.NO_COMPRESS);

        System.out.println("Compacted JSON Value");
        System.out.println(com_json);
        System.out.println("From RFC4627 JSON String: " + JSONValue.compress(json));
        System.out.println("From Compacted JSON String: " + JSONValue.compress(com_json));

        System.out.println("Standard RFC4627 JSON Value");
        System.out.println(json);
        System.out.println("From RFC4627 JSON String: " + JSONValue.uncompress(json));
        System.out.println("From Compacted JSON String: " + JSONValue.uncompress(com_json));

        //from compress json string
        System.out.println("From compress json string(JSONObject)");
        Object obj2=JSONValue.parse(com_json);
        System.out.println(JSONValue.toJSONString(obj2, JSONStyle.NO_COMPRESS));
        System.out.println(JSONValue.toJSONString(obj2, JSONStyle.MAX_COMPRESS));
    }

    //2. Java Struct <==> JsonSmart object
    public class Person {
        String  name;
        int     age;
        boolean single;
        long    mobile;

        public String getName(){
            return this.name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getAge() {
            return this.age;
        }
        public void setAge(int age) {
            this.age = age;
        }
        public boolean getSingle() {
            return this.single;
        }
        public void setSingle(boolean single) {
            this.single = single;
        }
        public long getMobile() {
            return mobile;
        }
        public void setMobile(long mobile) {
            this.mobile = mobile;
        }
    }

    public class JSONDomain {    // for convert struct <==> json
        public Object result = new JSONObject();

        public Object getResult() {
            return result;
        }
        public void setResult(Object result) {
            this.result = result;
        }
    }

    public void Struct2JsonObject() {
        System.out.println("========Struct2JsonObject=======");

        Person person = new Person();
        person.setName("json smart");
        person.setAge(13);
        person.setMobile(20130808);

        Person person2 = new Person();
        person2.setName("test");
        person2.setAge(123);
        person2.setMobile(888666);

        List<Person> array = new ArrayList<Person>();
        array.add(person);
        array.add(person2);

        //1. struct <==> JsonObject
        JSONObject obj = new JSONObject();
        //obj = (Object)person;  // compiler error!
        // way 1:
        JSONDomain data = new JSONDomain();   // for convert
        data.setResult(person);
        // obj = (JSONObject)data.getResult(); // run error: ClassCastException
        obj.put("person", data.getResult());
        System.out.println(JSONValue.toJSONString(obj));

        // way 2:
        obj.put("person", array.get(1));
        System.out.println(JSONValue.toJSONString(obj));

        //2. Container <==> JsonObject
        JSONArray jsonArray = new JSONArray();
        jsonArray.add(person);
        jsonArray.add(person2);
        JSONObject result = new JSONObject();
        result.put("persons", jsonArray);
        System.out.println(JSONValue.toJSONString(result));
    }

    //3. JsonSmartSerializationTest
    public static Map<String, Object> testBytes2Map(byte[] bytes) {
        Map<String, Object> map = null;
        try {
            map = (Map<String, Object>) JSONValue.parseStrict((new String(bytes, "UTF-8")));
        } catch (ParseException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return map;
    }

    // JsonSmartSerializationTest
    public static byte[] testMap2Bytes(Map<String, Object> map) {
        String str = JSONObject.toJSONString(map);
        byte[] result = null;
        try {
            result = str.getBytes("UTF-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return result;
    }

    public static void main(String[] args) throws Exception {
        DecodingTest();

        EncodingTest();

        EncodingTest2();

        JsonSmartTest test = new JsonSmartTest();
        test.Struct2JsonObject();

    }
}

解析文件示例

import net.minidev.json.JSONObject;
import net.minidev.json.JSONValue;
import net.minidev.json.JSONArray;
import net.minidev.json.JSONStyle;
import net.minidev.json.parser.ParseException;

import java.io.UnsupportedEncodingException;
import java.util.*;

import java.lang.StringBuffer;

import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.IOException;

/*
 * Home page: http://code.google.com/p/json-smart/
 *
 * compiler:  javac -cp json-smart-1.1.1.jar JsonTool.java
 *
 * Run:       java -cp ./:json-smart-1.1.1.jar JsonTool
 *
 */

public class JsonTool {

    //1. String <==> JsonObject
    public static void ParseData(String data) throws ParseException {
        System.out.println("=======decode=======");

        // s="{\"key\":\"Value\"}";
        Object obj  = JSONValue.parseStrict(data);
        JSONObject obj3 = (JSONObject)obj;

        System.out.println(obj3.get("data"));
        System.out.println();

    }

    public static void EncodingTest() {
        System.out.println("=======EncodingTest=======");

        // Json Object is an HashMap<String, Object> extends
        JSONObject obj = new JSONObject();
        obj.put("name", "foo");
        obj.put("num", 100);
        obj.put("balance", 1000.21);
        obj.put("is_vip", true);
        obj.put("nickname",null);

        System.out.println("Standard RFC4627 JSON");
        System.out.println(obj.toJSONString());

        System.out.println("Compacted JSON Value");
        System.out.println(obj.toJSONString(JSONStyle.MAX_COMPRESS));

        // if obj is an common map you can use:

        System.out.println("Standard RFC4627 JSON");
        System.out.println(JSONValue.toJSONString(obj));

        System.out.println("Compacted JSON Value");
        System.out.println(JSONValue.toJSONString(obj, JSONStyle.MAX_COMPRESS));   

    }

    public static void main(String[] args) throws Exception {

        if( args.length < 1) {
                System.out.println("Usage: JsonTool file");
                System.exit(-1);
        }

        String file = args[0];
        System.out.println(file);

        StringBuffer strBuffer = new StringBuffer();
        InputStreamReader inputReader = null;
        BufferedReader bufferReader = null;
        OutputStream outputStream = null;
        try
        {
            InputStream inputStream = new FileInputStream(file);
            inputReader = new InputStreamReader(inputStream);
            bufferReader = new BufferedReader(inputReader);

            // 读取一行
            String line = null;

            while ((line = bufferReader.readLine()) != null)
            {
                strBuffer.append(line);
            } 

        }
        catch (IOException e)
        {
            System.out.println(e.getMessage());
        }
        finally
        {
            // OtherUtilAPI.closeAll(outputStream, bufferReader, inputReader);
        }

        //System.out.println(strBuffer.toString());
        //System.out.println("\n");

        ParseData(strBuffer.toString());
    }
}
时间: 2024-09-29 08:34:07

json-smart 使用示例(推荐fastjson)的相关文章

Android JSON解析库Gson和Fast-json的使用对比和图书列表小案例

Android JSON解析库Gson和Fast-json的使用对比和图书列表小案例 继上篇json解析,我用了原生的json解析,但是在有些情况下我们不得不承认,一些优秀的json解析框架确实十分的好用,今天我们为了博客的保质保量,也就不分开写,我们直接拿比较火的Gson和Fast-json来使用,末尾在进行一些分析 Android JSON原生解析的几种思路,以号码归属地,笑话大全,天气预报为例演示 一.各有千秋 两大解析库的东家都是巨头,一个来自于Google官方,一个来自阿里巴巴,我们这

JSON 下 -- jansson 示例

JSON 下 -- jansson 示例 参考网址: jansson 库的下载: http://www.digip.org/jansson/ 安装jansson 步骤: http://blog.csdn.net/lz909/article/details/46042979 jansson 手册: https://jansson.readthedocs.io/en/latest/index.html API 介绍: http://jansson.readthedocs.io/en/2.2/apir

润乾集算报表使用json数据源的示例

JSON作为一种轻量级数据格式应用非常广泛,报表读取json数据源进行报表开发的需求也很常见.润乾集算报表可以很好支持json数据源,这里通过实例说明. 示例一 报表说明 学生成绩在应用中以json文件存在,现需要汇总学生成绩,并按总成绩排名,结果以报表展现.报表样式如下: JSON文件中包含班级.编号.姓名.学科.成绩等信息,格式如下: [ { "class": "Class one", "id": 1, "name": &

python中json的操作示例

先上一段示例 # -*- coding: cp936 -*- import json #构造一个示例数据,并打印成易读样式 j = {} j["userName"]="admin" j["realName"]="管理员" j["cookie"]="afasfasfasdfasdfasf" print json.dumps(j, ensure_ascii=False, indent=4)

JSON工具类库: alibaba/fastjson 使用记录

JSON工具类库: alibaba/fastjson 使用记录 一.了解JSON JSON标准规范中文文档: http://www.json.org/json-zh.html 最佳实践:http://kimmking.github.io/2017/06/06/json-best-practice/ (JSON的高级使用,特别十分有参考价值) 二.项目地址和Wiki: Git地址: https://github.com/alibaba/fastjson Wiki:https://github.co

spring boot2 修改默认json解析器Jackson为fastjson

0.前言 fastjson是阿里出的,尽管近年fasjson爆出过几次严重漏洞,但是平心而论,fastjson的性能的确很有优势,尤其是大数据量时的性能优势,所以fastjson依然是我们的首选:spring boot默认的json解析器是Jackson,替换为fastjson很有必要: 1.替换方法 1.1.引入依赖,[注意,1.2.61以下有严重高危漏洞,1.2.61修复,必须升级到1.2.61,目前最新版本为1.2.62] <!-- fastjson --> <dependency

Jackson序列化和反序列化Json数据完整示例

Jackson序列化和反序列化Json数据 Web技术发展的今天,Json和XML已经成为了web数据的事实标准,然而这种格式化的数据手工解析又非常麻烦,软件工程界永远不缺少工具,每当有需求的时候就会出现各种类库,框架以及工具来解决这些基础的问题,Jackson就是这些工具中的一个,使用这个工具开发者完全可以从手工结束Json数据的重复劳动中解放出来.使用Jackson首先需要下载相应的类库,如下的Maven dependency列出了完整的POM dependency. 1 <dependen

42-字符串到json 的错误 com.alibaba.fastjson.JSONObject cannot be cast to java.lang.String

json: {"updated_at":1551780617,"attr":{"uptime_h":3,"uptime_m":17},"did":"GBBxjJYAxE4apkxwEzR3"} Map rMap = (Map) JSON.parse("{"updated_at":1551780617,"attr":{"uptim

java对象与Json字符串之间的转化(fastjson)

1. 首先引入jar包 在pom.xml文件里加入下面依赖: <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.51</version> </dependency> 2. 创建一个Person类(方面下面使用) public class Person implements Comp