比如现在有一个json对象为jsonObj,需要给这个对象添加新的属性newParam,同时给newParam赋值为pre。做法如下:
var jsonObj={
'param1':22,
'param2' :33
}
jsonObj. newParam ='pre'
新的属性添加以后,json对象变成:
var jsonObj={
'param1':22,
'param2' :33,
'newParam':'pre'
}
扩展资料:
json数据格式:主要由对象 { } 和数组 [ ] 组成:
其中对象包括键值对(属性:属性值){key: value},value 可为 str,num,list,obj。取值使用 objcet.key。
{key: value, key2:value2,} 键:值用冒号分开,对间用,连接。
数组包含元素:num,str,list,objcet 都可以,利用索引访问 [index],用 . 连接各个值。
综上4种Json技术的比较: 在项目选型的时候可以使用Google的Gson和阿里巴巴的FastJson两种并行使用,
如果只是功能要求,没有性能要求,可以使用google的Gson,
如果有性能上面的要求可以使用Gson将bean转换json确保数据的正确,使用FastJson将Json转换Bean
2.1 主要类介绍
Gson类:解析json的最基础的工具类
JsonParser类:解析器来解析JSON到JsonElements的解析树
JsonElement类:一个类代表的JSON元素
JsonObject类:JSON对象类型
JsonArray类:JsonObject数组
TypeToken类:用于创建type,比如泛型List<?>
2.2 maven依赖
2.3 bean转换json
2.4 json转换bean
2.5 json转换复杂的bean,比如List,Set
将json转换成复杂类型的bean,需要使用TypeToken
2.6 通过json对象直接 *** 作json以及一些json的工具
a) 格式化Json
b) 判断字符串是否是json,通过捕捉的异常来判断是否是json
c) 从json串中获取属性
d) 除去json中的某个属性
e) 向json中添加属性
f) 修改json中的属性
g) 判断json中是否有属性
h) json中日期格式的处理
然后使用gson对象进行json的处理,如果出现日期Date类的对象,就会按照设置的格式进行处理
i) json中对于Html的转义
这种对象默认对Html进行转义,如果不想转义使用下面的方法
3.1 maven依赖
3.2 基础转换类
同上
3.3 bean转换json
将对象转换成格式化的json
将对象转换成非格式化的json
obj设计对象
对于复杂类型的转换,对于重复的引用在转成json串后在json串中出现引用的字符,比如 [0].books[1]
3.4 json转换bean
3.5 json转换复杂的bean,比如List,Map
3.6 通过json对象直接 *** 作json
a) 从json串中获取属性
b) 除去json中的某个属性
c) 向json中添加属性
d) 修改json中的属性
e) 判断json中是否有属性
f) json中日期格式的处理
使用JSON.toJSONStringWithDateFormat,该方法可以使用设置的日期格式对日期进行转换
4.1 maven依赖
4.2 基础转换类
同上
4.3 bean转换json
a)将类转换成Json,obj是普通的对象,不是List,Map的对象
b) 将List,Map转换成Json
4.4 json转换bean
4.5 json转换List,对于复杂类型的转换会出现问题
4.6 json转换Map
4.7 json对于日期的 *** 作比较复杂,需要使用JsonConfig,比Gson和FastJson要麻烦多了
创建转换的接口实现类,转换成指定格式的日期
4.8 JsonObject 对于json的 *** 作和处理
a) 从json串中获取属性
b) 除去json中的某个属性
c) 向json中添加和修改属性,有则修改,无则添加
d) 判断json中是否有属性
fastjson 和 jackson 在把对象序列化成json字符串的时候,是通过反射遍历出该类中的所有getter方法;
Gson 是通过反射遍历该类中的所有属性。
所以, 在定义POJO中的布尔类型的变量时,不要使用isSuccess这种形式,而要直接使用success 。
以上为网上摘抄,以下为实际项目中使用结果。
实体类为 BaseVO.java :
用Gson 将该实体类转成json时报以下异常:
原因是:子类和父类有相同的字段属性
解决方法:
(1)重命名重复字段。因为重复的字段在第三方包中,所以该方法在本例中不可行。
(2)将实体类中需要打印的字段加上注解 @Expose ,(本例将该类所有有get方法的属性都加上了) :
新建gson:
excludeFieldsWithoutExposeAnnotation 排除掉没有Expose注解的属性。
或者在不需要解析的字段前面加上 transient :
用该方式,没有报异常了,解析结果(加注解 @Expose 或加 transient )如下:
但从结果来看,那些直接调用第三方api获取值的属性没有解析,因为第三方的类无法加上 @Expose注解 ,导致这些属性为 null ,而 Gson默认的规则不会解析为 null 的属性 ,比如:
(3)换解析方式:使用FastJson。
因为FastJson是通过getter方法获取属性,并把其值序列化成json字符串的,所以这里,我们这个实体类中去掉不想被解析的属性的get方法,变成如下:
fastJson、JackJson以及Gson序列化对象与get、set以及对象属性之间的关系
JSON-C实现了一个引用计数对象模型,它允许您轻松地使用C语言来构建JSON对象,将它们输出为JSON格式的字符串,并将JSON格式字符串解析回JSON对象的C语言表示形式。它的目标是符合 RFC 7159 标准。
使用automake的编译过程如下:
使用cmake编译的过程如下:
cmake可选的几个编译选项为:
要使用json-c,最简单的方式是包含json.h头文件即可,或者最好是下列更具体的头文件之一:
详细且全面的API介绍文档: http://json-c.github.io/json-c/
JSON-C支持的JSON对象类型有7种:
下面系列函数用于创建一个JSON对象:
给JSON对象增加字段(不会增加引用计数):
删除json对象的指定字段,被删除的对象引用计数减去1,如果这个val没有更多的所有者,这个key对应的val被free,否则这个val的引用保存在内存中:
增加一个元素到json数组的末尾,obj引用计数不会增加,增加字段的方式更加紧凑;如果需要获取val的引用,需要用json_object_get()来传递该对象:
替换json数组中的值:
json数组的排序,这里需要自己写排序函数:
获取json对象的长度,依据字段的数目:
获取json对象的哈希表:
获取对象的数组列表:
获取json的类型:
获取json数组对象的长度:
获取json对象的bool值,int和double对象是0转换为FALSE,否则返回TRUE;非0长度的字符串返回TRUE;其他对象非空的话,返回TRUE:
获取json对象的长度,如果参数不是string类型的json,返回0:
按照索引获取json数组的对象:
转换json对象到c字符串格式:
获取JSON中指定类型的数值:
将字符串转换为json对象:
以下两个函数配合使用,前者获取该对象指针的所有权,引用计数加1,如果对象已经被释放,返回NULL;后者引用计数减1,如果对象已经被释放,返回1:
类型判断:
json_util.h提供了有关文件读写 *** 作的函数,这个文件的内容是json格式的:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)