找回密码
 加入
搜索
查看: 2140|回复: 9

[网络通信] 如何修改json数据里的值[已解决]

[复制链接]
发表于 2020-8-16 18:38:44 | 显示全部楼层 |阅读模式
本帖最后由 .Simba 于 2020-8-20 13:37 编辑

论坛里有人指点了如何读取json数据里的值,有法子可以修改不?
https://www.autoitx.com/forum.php?mod=viewthread&tid=38936&fromuid=7667396
$json = '{"name":"Tom","sex":"男","age":"23","hobby":{"one":"看书","two":"看电影","three":"写BUG"}}'

MsgBox(0, '示例1', _GetJsonData($json, 'age'))
MsgBox(0, '示例2', _GetJsonData($json, 'hobby.one'))

Func _GetJsonData($sJson, $key)
        Local $oScript = ObjCreate('ScriptControl')
        $oScript.Language = 'JScript'
        $oScript.AddCode('var JsonData = ' & $sJson & ';')
        Local $value = $oScript.Eval('JsonData.' & $key)
        Return $value
EndFunc


发表于 2020-8-17 17:20:03 | 显示全部楼层
Local $json = '{"name":"Tom","sex":"男","age":"23","hobby":{"one":"看书","two":"看电影","three":"写BUG"}}'
Local $sStr = 'one';成员名
Local $eStr = '修改后的值';值
$json = StringRegExpReplace($json, '(?i)(^.*"' & $sStr & '":")(.+?)(".*$)', '\1' & $eStr & '\3')
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $json = ' & $json & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
发表于 2020-8-17 17:23:12 | 显示全部楼层
本帖最后由 862228699 于 2020-8-17 17:26 编辑

$json = {"name":"Tom","sex":"男","age":"23","hobby":{"one":"改后的值","two":"看电影","three":"写BUG"}}

评分

参与人数 1金钱 +10 收起 理由
.Simba + 10 赞一个!

查看全部评分

发表于 2020-8-18 14:47:58 | 显示全部楼层
本帖最后由 chamlien 于 2020-8-18 14:50 编辑

这个属于JS操作范围,将要读写的json在js里初始化为全局变量,然后该怎么操作就按js的语法来就可以了
Global $oScript
Local $json = '{"name":"Tom","sex":"男","age":"23","hobby":{"one":"看书","two":"看电影","three":"写BUG"}}'
_InitJsonData($json)

MsgBox(0, '示例1', _GetJsonData($json, 'sex'))
;修改 sex 属性值为女
_SetJsonData($json, 'sex', '女')
MsgBox(0, '示例3', _GetJsonData($json, 'sex'))

Func _InitJsonData($sJson)
   $oScript= ObjCreate('ScriptControl')
   $oScript.Language = 'JScript'
   $oScript.AddCode('var JsonData = ' & $sJson & ';')
EndFunc

Func _GetJsonData($sJson, $key)
   Return $oScript.Eval('JsonData.' & $key)
EndFunc

Func _SetJsonData($sJson, $key, $value)
   $oScript.AddCode('JsonData.' & $key & '="' & $value & '";')
EndFunc

评分

参与人数 2金钱 +42 贡献 +13 收起 理由
.Simba + 20 很给力!
auto + 22 + 13 赞一个!

查看全部评分

 楼主| 发表于 2020-8-20 13:36:40 | 显示全部楼层
chamlien 发表于 2020-8-18 14:47
这个属于JS操作范围,将要读写的json在js里初始化为全局变量,然后该怎么操作就按js的语法来就可以了

谢谢,解决问题。
 楼主| 发表于 2020-8-20 13:38:00 | 显示全部楼层
862228699 发表于 2020-8-17 17:23
$json = {"name":"Tom","sex":"男","age":"23","hobby":{"one":"改后的值","two":"看电影","three":"写BUG" ...

正则有时候靠不住
发表于 2020-8-20 13:55:30 | 显示全部楼层
这个用正则的话 如遇嵌套 或同名 或值含"\}等字符 会很麻烦,不推荐。
用 chamlien 的方式才简单,只是 _SetJsonData 时需检查 $value 是否含有上述字符,如含需先转义,否则会崩溃。
 楼主| 发表于 2020-8-20 14:06:38 | 显示全部楼层
afan 发表于 2020-8-20 13:55
这个用正则的话 如遇嵌套 或同名 或值含"\}等字符 会很麻烦,不推荐。
用 chamlien 的方式才简单,只是 _S ...

判断是否包含字符,实用正则判断吗?
发表于 2020-8-20 14:44:27 | 显示全部楼层
.Simba 发表于 2020-8-20 14:06
判断是否包含字符,实用正则判断吗?

正则肯定是最简单的,将这些字符前面添加一个 \ 即可
 楼主| 发表于 2020-8-20 20:46:48 | 显示全部楼层
afan 发表于 2020-8-20 14:44
正则肯定是最简单的,将这些字符前面添加一个 \ 即可

谢A大提醒,不然这个错误又要想很久。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-19 17:32 , Processed in 0.081494 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表