【语言对比】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去转换了。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。