如何修改json数据里的值[已解决]
本帖最后由 .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
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
本帖最后由 862228699 于 2020-8-17 17:26 编辑
$json = {"name":"Tom","sex":"男","age":"23","hobby":{"one":"改后的值","two":"看电影","three":"写BUG"}} 本帖最后由 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 chamlien 发表于 2020-8-18 14:47
这个属于JS操作范围,将要读写的json在js里初始化为全局变量,然后该怎么操作就按js的语法来就可以了
谢谢,解决问题。 862228699 发表于 2020-8-17 17:23
$json = {"name":"Tom","sex":"男","age":"23","hobby":{"one":"改后的值","two":"看电影","three":"写BUG" ...
正则有时候靠不住 这个用正则的话 如遇嵌套 或同名 或值含"\}等字符 会很麻烦,不推荐。
用 chamlien 的方式才简单,只是 _SetJsonData 时需检查 $value 是否含有上述字符,如含需先转义,否则会崩溃。 afan 发表于 2020-8-20 13:55
这个用正则的话 如遇嵌套 或同名 或值含"\}等字符 会很麻烦,不推荐。
用 chamlien 的方式才简单,只是 _S ...
判断是否包含字符,实用正则判断吗? .Simba 发表于 2020-8-20 14:06
判断是否包含字符,实用正则判断吗?
正则肯定是最简单的,将这些字符前面添加一个 \ 即可 afan 发表于 2020-8-20 14:44
正则肯定是最简单的,将这些字符前面添加一个 \ 即可
谢A大提醒,不然这个错误又要想很久。
页:
[1]