JSON的学习与使用 (3)

原因在于:eval 本身的问题。 由于 json 是以 {} 的方式来开始以及结束的,在 js 中,它会被当成一个语句块来处理,所以必须强制性的将它转换成一种表达式。

加上圆括号的目的是迫使 eval 函数在处理 JavaScript 代码的时候强制将括号内的表达式(expression)转化为对象,而不是作为语句(statement)来执行。举一个例子,例如对象字面量 {},如若不加外层的括号,那么 eval 会将大括号识别为 javascript 代码块的开始和结束标记,那么{}将会被认为是执行了一句空语句。所以下面两个执行结果是不同的:

alert(eval("{}"); // return undefined
alert(eval("({})");// return object[Object]

测试用例

var user = '{"name":"关注公众号:小李不秃","age":18,"money":null,'+  
    'showInfo:function(){'+  
    'document.write("姓名:"+this.name+"<br/>");'+  
    'document.write("年龄:"+this.age+"<br/>");'+  
    'document.write("金钱:"+this.money+"<br/>");}}'
var u = eval('('+user+')');  
u.showInfo();

运行结果:

姓名:关注公众号:小李不秃
年龄:18
金钱:null
Json 在 Java 中的使用

在 Java 中,解析 JSON 的第三方工具类有很多,常用的有几种:

Json-lib

Gson

Jackson

fastjson

统一用下面的 Person 类作为示例

@Data
public class Person {

    private String name;
    private Integer age;

    public Person() {
    }

    public Person(String name, Integer age) {
        this.name = name;
        this.age = age;
    }
}

那我们对这几个工具类进行一一介绍:

Json-lib

Json-lib 是一个 Java 类库,提供将 Java 对象(包括:beans,maps,collections,java arrays 和 XML等)和 JSON 互相转换的功能。

引入相关 jar 包

commons-io-2.0.1.jar

commons-lang-2.5.jar

commons-collections-3.1.jar

commons-beanutils-1.7.0.jar

ezmorph-1.0.3.jar

json-lib-2.1-jdk15.jar

Json-lib 工具类

封装一个 Json-lib 工具类,方便测试用。

// Json-lib 工具类
public class JsonLibUtils {
    /**
     * bean 转换为 Json 字符串
     */

    public static String bean2json(Object o){
        JSONObject jsonObject = JSONObject.fromObject(o);
        return jsonObject.toString();
    }
    /**
     * json 转换为 bean
     */

    public static Object json2bean(String s,Class c){
        JSONObject jsonObject = JSONObject.fromObject(s);
        return JSONObject.toBean(jsonObject,c);
    }
    /**
     * list 转换为 Json 字符串
     */

    public static String list2json(List list){
        JSONArray jsonArray = JSONArray.fromObject(list);
        return jsonArray.toString();
    }
    /**
     * json 转换为 list
     */

    public static List json2List(String s){
        return JSONArray.fromObject(s);
    }
    /**
     * set 转换为 Json 字符串
     */

    public static String set2json(Set set){
        JSONArray jsonArray = JSONArray.fromObject(set);
        return jsonArray.toString();
    }

    /**
     * json 转换为 set
     */

    public static Set json2Set(String json) {
        Set<Person> set = new HashSet<>(json2List(json));
        return set;
    }
    /**
     * map 转换为 Json 字符串
     */

    public static String map2json(Map map){
        JSONObject jsonObject = JSONObject.fromObject(map);
        return jsonObject.toString();
    }
    /**
     * json 转换为 map
     */

    public static Map<Object, Object> json2Map(String json) {
        JSONObject jsonObject = JSONObject.fromObject(json);
        Map<Object, Object> map = (Map)jsonObject;
        return map;
    }
}

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyzfjp.html