QML下Json相关
qml json 解析 字符串化
Qml下,提供了JSON帮助完成对象json对象的生成和字符串化.
-
一.Json对象的生成
-
1.借助函数从字符串分析
JSON.parse(text[, reviver])
1.1 参数
text
字符串需要分析reviver
可选函数参数,parse在分析过程中,每个对象掉用该函数.1.2 只传入text调用
var jsonStr="{\"k1\":\"v1\",\"k2\":\"v2\",\"o2\":{\"ok1\":\"ov1\"},\"ak1\":[\"av1\",\"av2\"]}" var json=JSON.parse(jsonStr)
上述json即分析json对象,可使用该对象对json访问和修改的一系列操作
1.3 传入text 和reviver调用()
声明函数打印对象的函数key和value
function printJson(k,v){ console.log("k: " k); console.log("v: " v); }
如下调用
var jsonStr="{\"k1\":\"v1\",\"k2\":\"v2\",\"o2\":{\"ok1\":\"ov1\"},\"ak1\":[\"av1\",\"av2\"]}"; var json=JSON.parse(jsonStr,printJson);
-
2.通过赋值定义json对象
形式如下:
var json={"k1":"v1","k2":"v2","o1":{"ok1":"ov1"},"ak1":["av1","av2","aqv3"]}
这样就直接得到了一个json对象
-
-
二.Json对象的字符串
-
由json对象转化为string字符串
***JSON.stringify(value[, replacer[, space]])***
1.参数
value
需要转换的json对象可以通过一种方式获得replacer
可以传入函数也可以传入数组space
格式输出参数可以是数字或其他字符.2.只传入value
var json ={"k1":"v1","k2":"v2","o1":{"ok1":"ov1"},"a1":["av1","av2"]} var jsonStr=JSON.stringify(json) console.log(jsonStr) //输出如下: /* qml: {"k1":"v1","k2":"v2","o1":{"ok1":"ov1"},"a1":["av1","av2"]} */
3.replacer使用
函数接收json子对象的key和value,返回值会对json修改子对象的值;返回 undefined当对应子对象的字符串化时,.PS 原json对象不会被修改
varvar json ={"k1":"v1","k2":"v2","o1":{"ok1":"ov1"},"a1":["av1","av2"]} //返回 undefined 对应子对象的字符串化将被忽略,PS 'return'等同于 'return undefined' //返回其他值 对应子对象的值将在字符串化时被替换 jsonStr=JSON.stringify(json,function(k,v){ if(k==="k2"){//忽略对 k二子对象字符串化 return undefined //return //和return undefined等价 } if(k==="ok1"){///替换初始化值 return "change value" } return v }) console.log(jsonStr) jsonStr=JSON.stringify(json)//原 json不会被改变 console.log(jsonStr) //输出如下: /* qml: {"k1":"v1","o1":{"ok1":"change value"},"a1":["av1","av2"]} qml: {"k1":"v1","k2":"v2","o1":{"ok1":"ov1"},"a1":["av1","av2"]} */
4.space使用
本质是在每个对象面前换行,并根据space填写格式化字符;为数字时,格式化字符为space指定数量的" ",其他字符直接填写指定字符时.
PS与上一级相比,填写的格式化字符将与上一级相比插入两次。
var json ={"k1":"v1","k2":"v2","o1":{"ok1":"ov1"},"a1":["av1","av2"]} var jsonStr=JSON.stringify(json,null,1) console.log("1 space:\n",jsonStr) jsonStr=JSON.stringify(json,null,4) console.log("4 space:\n",jsonStr) jsonStr=JSON.stringify(json,null,'\t') console.log("\\t:\n",jsonStr) jsonStr=JSON.stringify(json,null,"format") console.log("some str:\n",jsonStr) //输出如下: /* qml: 1 space: { "k1": "v1", "k2": "v2", "o1": { "ok1": "ov1" }, "a1": [ "av1", "av2" ] } qml: 4 space: { "k1": "v1", "k2": "v2", "o1": { "ok1": "ov1" }, "a1": [ "av1", "av2" ] } qml: \t: { "k1": "v1", "k2": "v2", "o1": { "ok1": "ov1" }, "a1": [ "av1", "av2" ] } qml: some str: { format"k1": "v1", format"k2": "v2", format"o1": { formatformat"ok1": "ov1" format}, format"a1": [ formatformat"av1", formatformat"av2" format] } */
-
-
三.Json对象对子对象的操作
-
1.访问子对象,获取子对象的值
1.1使用下标,即使用"[]"操作符
直接在"[]"内输入子对象key值可以,一般对象key值为字符串,数组为数组索引
var json ={"k1":"v1","k2":"v2","o1":{"ok1":"ov1"},"a1":["av1","av2"]} console.log("k2 :",json["k2"]); console.log("o1 :",json["o1"]);//直接返回 对象 {"ok1":"ov1"} console.log("ok1 :",json["o1"]["ok1"]); console.log("a1 :",json["a1"]);//直接返回 数组 ["av1","av2"] console.log("av1 :",json["a1"][0]); //输出如下: /* qml: k2 : v2 qml: o1 : [object Object] qml: ok1 : ov2 qml: a1 : [av1,av2] qml: av1 : av1 */
1.2使用"."操作符访问
直接在"[]"内输入子对象key值可以,一般对象key值为字符串,数组为数组索引
var json ={"k1":"v1","k2":"v2","o1":{"ok1":"ov2"},"a1":["av1","av2"]} console.log("k2 :",json.k2); console.log("o1 :",json.o1);//直接返回 对象 {"ok1":"ov1"} console.log("ok1 :",json.o1.ok1); consoe.log("a1 :",json.a1);//直接返回 数组 ["av1","av2"] console.log("av1 :",json.a1[0]);//数组内元素不能直接以".0"方式访问 //输出如下: /* qml: k2 : v2 qml: o1 : [object Object] qml: ok1 : ov2 qml: a1 : [av1,av2] qml: av1 : av1 */
-
2.修改已有子对象的值
修改子对象的值,和获取的方式一致,只是把对象作为左值就可
2.1使用下标的方式,即使用"[]"操作符
直接在"[]"内输入子对象的key值即可,一般对象key值为字符串,数组内则为数组索引,然后直接等号赋值即可
var json ={"k1":"v1","k2":"v2","o1":{"ok1":"ov1"},"a1":["av1","av2"]} json["k2"]="new v2"; console.log("change k2 :",JSON.stringify(json)); json["o1"]["ok1"]="new ov1"; console.log("change ok1 :",JSON.stringify(json)); json["o1"]="new o1" console.log("change o1 :",JSON.stringify(json)); json["a1"][0]="new av1" console.log("change av1 :",JSON.stringify(json)); json["a1"]="new a1" console.log("change a1 :",JSON.stringify(json)); //输出如下: /* qml: change k2 : {"k1":"v1","k2":"new v2","o1":{"ok1":"ov1"},"a1":["av1","av2"]} qml: change ok1 : {"k1":"v1","k2":"new v2","o1":{"ok1":"new ov1"},"a1":["av1","av2"]} qml: change o1 : {"k1":"v1","k2":"new v2","o1":"new o1","a1":["av1","av2"]} qml: change av1 : {"k1":"v1","k2":"new v2","o1":"new o1","a1":["new av1","av2"]} qml: change a1 : {"k1":"v1","k2":"new v2","o1":"new o1","a1":"new a1"} */
2.2使用"."操作符方式
直接在"[]"内输入子对象的key值即可,一般对象key值为字符串,数组内则为数组索引
var json ={"k1":"v1","k2":"v2","o1":{"ok1":"ov1"},"a1":["av1","av2"]} json.k2="new v2"; console.log("change k2 :",JSON.stringify(json)); json.o1.ok1="new ov1"; console.log("change ok1 :",JSON.stringify(json)); json.o1="new o1" console.log("change o1 :",JSON.stringify(json)); json.a1[0]="new av1"//数组内元素不能直接以".0"方式访问 console.log("change av1 :",JSON.stringify(json)); json.a1="new a1" console.log("change a1 :",JSON.stringify(json)); //输出如下: /* qml: change k2 : {"k1":"v1","k2":"new v2","o1":{"ok1":"ov1"},"a1":["av1","av2"]} qml: change ok1 : {"k1":"v1","k2":"new v2","o1":{"ok1":"new ov1"},"a1":["av1","av2"]} qml: change o1 : {"k1":"v1","k2":"new v2","o1":"new o1","a1":["av1","av2"]} qml: change av1 : {"k1":"v1","k2":"new v2","o1":"new o1","a1":["new av1","av2"]} qml: change a1 : {"k1":"v1","k2":"new v2","o1":"new o1","a1":"new a1"} */
-
3.新增子对象
新增子对象的值,和修改的方式一致,只是赋值的的对象原本不存在
2.1使用下标的方式,即使用"[]"操作符
直接在"[]"内输入子对象的key值即可,一般对象key值为字符串,数组内则为数组索引,然后直接等号赋值即可
var json ={"k1":"v1","k2":"v2","o1":{"ok1":"ov1"},"a1":["av1","av2"]} json["k3"]="v3"; console.log("add k3 :",JSON.stringify(json)); json["o2"]={"ok1":"ov1"}; console.log("add o2 :",JSON.stringify(json)); json["a2"]=["av1","av2"] console.log("add a1 :",JSON.stringify(json)); json["a1"][2]="av3" console.log("add av3 :",JSON.stringify(json)); //输出如下: /* qml: add k3 : {"k1":"v1","k2":"v2","o1":{"ok1":"ov1"},"a1":["av1","av2"],"k3":"v3"} qml: add o2 : {"k1":"v1","k2":"v2","o1":{"ok1":"ov1"},"a1":["av1","av2"],"k3":"v3","o2":{"ok1":"ov1"}} qml: add a1 : {"k1":"v1","k2":"v2","o1":{"ok1":"ov1"},"a1":["av1","av2"],"k3":"v3","o2":{"ok1":"ov1"},"a2":["av1","av2"]} qml: add av3 : {"k1":"v1","k2":"v2","o1":{"ok1":"ov1"},"a1":["av1","av2","av3"],"k3":"v3","o2":{"ok1":"ov1"},"a2":["av1","av2"]} */
2.2使用"."操作符方式
直接在"[]"内输入子对象的key值即可,一般对象key值为字符串,数组内则为数组索引
var json ={"k1":"v1","k2":"v2","o1":{"ok1":"ov1"},"a1":["av1","av2"]} json.k3="v3"; console.log("add k3 :",JSON.stringify(json)); json.o2={"ok1":"ov1"}; console.log("add o2 :",JSON.stringify(json)); json.a2=["av1","av2"] console.log("add a1 :",JSON.stringify(json)); json.a1[2]="av3" console.log("add av3 :",JSON.stringify(json)); //输出如下: /* qml: add k3 : {"k1":"v1","k2":"v2","o1":{"ok1":"ov1"},"a1":["av1","av2"],"k3":"v3"} qml: add o2 : {"k1":"v1","k2":"v2","o1":{"ok1":"ov1"},"a1":["av1","av2"],"k3":"v3","o2":{"ok1":"ov1"}} qml: add a1 : {"k1":"v1","k2":"v2","o1":{"ok1":"ov1"},"a1":["av1","av2"],"k3":"v3","o2":{"ok1":"ov1"},"a2":["av1","av2"]} qml: add av3 : {"k1":"v1","k2":"v2","o1":{"ok1":"ov1"},"a1":["av1","av2","av3"],"k3":"v3","o2":{"ok1":"ov1"},"a2":["av1","av2"]} */
-
4.删除已有子对象
删除子对象的值,有两种方式
3.1给要删除的对象赋值为
undefined
,操作方式和修改已有子对象的值方法一致.详见三.2//删除示例,只举一个,操作方式和修改已有子对象的值方法一致.详见三.2 var json ={"k1":"v1","k2":"v2","o1":{"ok1":"ov1"},"a1":["av1","av2"]} json.k1=undefined console.log(JSON.stringify(json)) //输出如下: /* qml: {"k2":"v2","o1":{"ok1":"ov1"},"a1":["av1","av2"]} */
3.2使用
delete
直接删除要删除的对象即可,具体操作是在访问对象的语句前加delete
.//删除示例,只举一个,其他只要把delete 后的替换成其他访问对象语法就好 var json ={"k1":"v1","k2":"v2","o1":{"ok1":"ov1"},"a1":["av1","av2"]} delete json.k1 console.log(JSON.stringify(json)) //输出如下: /* qml: {"k2":"v2","o1":{"ok1":"ov1"},"a1":["av1","av2"]} */
3.3json数组内对象的删除
json数组内对象的删除其实和其他删除方式一致,但要多出一个步骤,总的来说json数组内的对象的删除和qml单独一个数组的删除方式是一致的
var json ={"k1":"v1","k2":"v2","o1":{"ok1":"ov1"},"a1":["av1","av2"]} json.a1[0]=undefined; console.log(JSON.stringify(json)) json.a1.splice(0,1)//0指开始索引,1指删除数量 console.log(JSON.stringify(json)) //输出如下: /* qml: {"k1":"v1","k2":"v2","o1":{"ok1":"ov1"},"a1":[null,"av2"]} qml: {"k1":"v1","k2":"v2","o1":{"ok1":"ov1"},"a1":["av2"]} */ //直接调用splice也可以 var json ={"k1":"v1","k2":"v2","o1":{"ok1":"ov1"},"a1":["av1","av2"]} json.a1.splice(0,1) console.log(JSON.stringify(json)) //输出如下: /* qml: {"k1":"v1","k2":"v2","o1":{"ok1":"ov1"},"a1":["av2"]} */
-