.Simba 发表于 2020-8-16 18:38:44

如何修改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


862228699 发表于 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

862228699 发表于 2020-8-17 17:23:12

本帖最后由 862228699 于 2020-8-17 17:26 编辑

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

chamlien 发表于 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

.Simba 发表于 2020-8-20 13:36:40

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

谢谢,解决问题。

.Simba 发表于 2020-8-20 13:38:00

862228699 发表于 2020-8-17 17:23
$json = {"name":"Tom","sex":"男","age":"23","hobby":{"one":"改后的值","two":"看电影","three":"写BUG" ...

正则有时候靠不住

afan 发表于 2020-8-20 13:55:30

这个用正则的话 如遇嵌套 或同名 或值含"\}等字符 会很麻烦,不推荐。
用 chamlien 的方式才简单,只是 _SetJsonData 时需检查 $value 是否含有上述字符,如含需先转义,否则会崩溃。

.Simba 发表于 2020-8-20 14:06:38

afan 发表于 2020-8-20 13:55
这个用正则的话 如遇嵌套 或同名 或值含"\}等字符 会很麻烦,不推荐。
用 chamlien 的方式才简单,只是 _S ...

判断是否包含字符,实用正则判断吗?

afan 发表于 2020-8-20 14:44:27

.Simba 发表于 2020-8-20 14:06
判断是否包含字符,实用正则判断吗?

正则肯定是最简单的,将这些字符前面添加一个 \ 即可

.Simba 发表于 2020-8-20 20:46:48

afan 发表于 2020-8-20 14:44
正则肯定是最简单的,将这些字符前面添加一个 \ 即可

谢A大提醒,不然这个错误又要想很久。
页: [1]
查看完整版本: 如何修改json数据里的值[已解决]