首页 > 代码库 > 【语言对比】JSON的编解码

【语言对比】JSON的编解码

    JAVA、Python和C++对于json的处理,都可以通过第三方库来完成,语言本身都不支持。下面以常用的场景对比这三中语言在处理json上的优缺点。下面以java的jackson库、python的simplejson库以及c++的jsoncpp库作为各自语言的代表


1、把对象转换为json串

s1为各自语言定义好的类实例

JAVA:

        ObjectMapper objMapper = new ObjectMapper();

        objMapper.writeValueAsString(s1)  


Python:

如果想把自定义对象转换为json字符串,在python中还需要定义该对象转换为dict类型的函数:

def convert_student(obj):

    dict = {}

    dict.update(obj.__dict__)

    return dict


json.dump(obj,default=convert_student)


C++:

jsoncpp不支持直接把对象序列化为json串的函数,它只能通过手动构建json节点来实现对象的json序列化

Json::Value root;

root["name"]="xxx"

root["age"]=12

root.toStyledString()       


从上面三种不同的语言对比可以看出来,因为JAVA本身有java bean的概念,即有了通用的获取对象属性的方法,所以java中可以方便自然的把对象转换为json串;而C++中显然无法提供这种通用的概念,所以只能是开发者自己把类转换为定义好的Json::value,然后jsoncpp再从jsonvalue转换。python因为有内置的dict的数据类型,这种数据类型天然适合用来处理json的转换,所以只要实现类到dict的数据类型转换函数,就能完成到json串的转换。


2、把json串转换为类

JAVA:

Student rt = objMapper.reader(Student.class).readValue(jsonstr);

Python:

def rebuild_student(pairs):

    stu = Student()

    stu.__dict__ = pairs

    return stu

json.loads(jsonstr, object_hook=rebuild_student)

C++:

Json::Reader reader;

Json::Value value;

reader.parser(str,value)


从类转换为json串的分析,我们不难得出从json串到类的转换,同样是java可以直接转换,python需要借助dict类型,而C++,只有老老实实的自己从Json::Value去转换了。