开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 6027|回复: 5
收起左侧

[已回应] 类_json中\转义问题

[复制链接]
发表于 2019-12-21 13:39:54 | 显示全部楼层 |阅读模式   浙江省丽水市
本帖最后由 草梅友仁 于 2019-12-21 13:39 编辑

我看了下更新日志,对于反斜杠\的转义在7.6.5版本后修改过了。虽然解决了一些问题但也出现了更多问题。
例如
  
子程序名返回值类型公开备 注
测试_6  
变量名类 型静态数组备 注
obj类_json 
obj.置属性 (“a”, “123\456”)
调试输出 (obj.取xx文本 ())
调试输出 (obj.取通用属性 (“a”))
输出结果为
* “{"a":"123%6"}”
* “123%6”
很明显出现了转义错误。
对此,优化建议如下


i支持库列表   支持库注释   
spec特殊功能支持库
  
子程序名返回值类型公开备 注
取shuju文本文本型 
' 不知道为什么shuju打不出
' 返回 (对象.文本方法 (“Eval”, dataName + “.toJSONString()”))
对象.数值方法 (“Eval”, “var strScr = JSON.stringify(” + dataName + “)”)  ' 格式
返回 (对象.文本方法 (“Eval”, “strScr.replace(g_reg, '\\\\')”))  ' 此处需要四个反斜杠才是对的
子程序名返回值类型公开备 注
取通用属性文本型 对于数字键名或者非正常变量字符(比如有空格),必须使用 aa[x]的方式。
参数名类 型参考可空数组备 注
名字文本型支持a.b.c[0]或者[0].a.b,键名为数值时a.b模式无效,必须使用a[20]模式。
为对象逻辑型为真解析属性为 数值,json{},不然有转义"\"
变量名类 型静态数组备 注
a文本型 
如果真 (取文本左边 (名字, 1)“[”)
a = “.”
如果真 (为对象)
返回 (对象.文本方法 (“Eval”, “JSON.stringify(” + dataName + a + 名字 + “)”))
如果真 (对象.是否为空 ())
如果真 (取类型 (名字) = 2)
返回 (到文本 (取属性数值 (名字)))
返回 (对象.文本方法 (“Eval”, dataName + a + 名字 + “.replace(g_reg, '\\')”)) ' 此处需补上反斜杠转义
返回 (“”)

修改后运行结果为
* “{"a":"123\\456"}”
* “123\456”
符合预期结果。
我估计类_json的其他方法应该也存在类似问题,建议下个版本一并修复


结帖率:93% (70/75)
发表于 2021-8-16 22:06:47 | 显示全部楼层   河北省唐山市
{"status":200,"msg":"获取成功","ex":{"id":66,"jid":0,"type":100023,"state":0,"data":"{\"Type\":100023,\"Quantity\":5,\"Resolving_power\":\"1080x1920\",\"Font_title_name\":\"\",\"Font_title_Size\":\"10\",\"Font_title_Bold\":\"1\",\"Font_title_Color\":\"16777215\",\"Font_title_Stroke\":\"16711680\",\"Font_title_Shadow\":\"3092271\",\"Font_title_distance\":\"24%\",\"Font_subtitle_name\":\"\",\"Font_subtitle_Size\":\"10\",\"Font_subtitle_Bold\":\"1\",\"Font_subtitle_Color\":\"16777215\",\"Font_subtitle_Stroke\":\"16711680\",\"Font_subtitle_Shadow\":\"3092271\",\"Font_subtitle_distance\":\"87%\",\"background_music\":false,\"background_volume\":\"21%\",\"Acoustic_volume\":\"100%\",\"Area_clip\":true,\"Area_clip_W\":\"iw\/2\",\"Area_clip_H\":\"ih-175\",\"Area_clip_X\":\"iw\/4\",\"Area_clip_Y\":\"69\",\"Tone_adjustment\":false,\"Tone_H\":\"0\",\"Tone_S\":\"1\",\"Tone_B\":\"0\",\"Color_balance\":false,\"Color_balance_RGB\":\"rh=.3:gh=.3:bh=.3\",\"Video_layout_W\":\"(W-w)\/2\",\"Video_layout_H\":\"(H-h)\/2\",\"Ending_effect\":0,\"Ending_effect_duration\":\"1\"}","ex":""}}
回复 支持 反对

使用道具 举报

结帖率:93% (70/75)
发表于 2021-8-16 22:06:21 | 显示全部楼层   河北省唐山市
问题解决了没?我也遇到这问题了,编码后不行所以还是不能编码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-21 16:21:09 | 显示全部楼层   浙江省丽水市
项目部004 发表于 2019-12-21 14:25
取数 据文本为什么要加四个反斜杆!!!置属性里有个替换写错了,没发布的版本已经修正了,至于replace本 ...

g_Str = 子文本替换 (值, “\”, “\\”, , , 真)  ' 转义
g_Str = 子文本替换 (g_Str, “'”, “\'”, , , 真)  ' 转义【应该是这里错了吧?但我已经修复了这个问题】
g_Str = 子文本替换 (g_Str, #引号, “\” + #引号, , , 真)
g_Str = 子文本替换 (g_Str, 字符 (13), “\r”, , , 真)
g_Str = 子文本替换 (g_Str, 字符 (10), “\n”, , , 真)

至于是不是四个反斜杠才是对的。我的理解的是要把g_reg这玩意儿再替换成两个反斜杠,当然需要4个反斜杠。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-21 16:20:15 | 显示全部楼层   浙江省丽水市
项目部004 发表于 2019-12-21 14:25
取数 据文本为什么要加四个反斜杆!!!置属性里有个替换写错了,没发布的版本已经修正了,至于replace本 ...
  
子程序名返回值类型公开备 注
置属性 
参数名类 型参考可空数组备 注
名字文本型支持a.b.c[0]
文本型
为对象逻辑型属性解析为json对象,数组
变量名类 型静态数组备 注
g_Str文本型 
g_ify文本型 
如果真 (对象.文本方法 (“Eval”, 名字)“”)  ' 路径
g_ify = “.”
如果真 (为对象)
值 = 选择 (值 = “”, “{}”, 值)
对象.方法 (“Eval”, dataName + g_ify + 名字 + “ = eval(” + 值 + “)”)
返回 ()
g_Str = 子文本替换 (值, “\”, “\\”, , , )  ' 转义
g_Str = 子文本替换 (g_Str, “'”, “\'”, , , )  ' 转义【应该是这里错了吧?但我已经修复了这个问题】
g_Str = 子文本替换 (g_Str, #引号, “\”#引号, , , )
g_Str = 子文本替换 (g_Str, 字符 (13), “\r”, , , )
g_Str = 子文本替换 (g_Str, 字符 (10), “\n”, , , )
对象.方法 (“Eval”, “var g_Str = '” + g_Str + “'.replace(/\\/g, g_regexp)”)  ' 全局替换
对象.方法 (“Eval”, dataName + g_ify + 名字 + “ = g_Str”)  ' 赋值

所以再测试下呗。
至于是不是四个反斜杠才是对的。我的理解的是要把g_reg这玩意儿再替换成两个反斜杠,当然需要4个反斜杠。




回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2019-12-21 16:19:48 | 显示全部楼层   浙江省丽水市
项目部004 发表于 2019-12-21 14:25
取数 据文本为什么要加四个反斜杆!!!置属性里有个替换写错了,没发布的版本已经修正了,至于replace本 ...
  
子程序名返回值类型公开备 注
置属性 
参数名类 型参考可空数组备 注
名字文本型支持a.b.c[0]
文本型
为对象逻辑型属性解析为json对象,数组
变量名类 型静态数组备 注
g_Str文本型 
g_ify文本型 
如果真 (对象.文本方法 (“Eval”, 名字)“”)  ' 路径
g_ify = “.”
如果真 (为对象)
值 = 选择 (值 = “”, “{}”, 值)
对象.方法 (“Eval”, dataName + g_ify + 名字 + “ = eval(” + 值 + “)”)
返回 ()
g_Str = 子文本替换 (值, “\”, “\\”, , , )  ' 转义
g_Str = 子文本替换 (g_Str, “'”, “\'”, , , )  ' 转义【应该是这里错了吧?但我已经修复了这个问题】
g_Str = 子文本替换 (g_Str, #引号, “\”#引号, , , )
g_Str = 子文本替换 (g_Str, 字符 (13), “\r”, , , )
g_Str = 子文本替换 (g_Str, 字符 (10), “\n”, , , )
对象.方法 (“Eval”, “var g_Str = '” + g_Str + “'.replace(/\\/g, g_regexp)”)  ' 全局替换
对象.方法 (“Eval”, dataName + g_ify + 名字 + “ = g_Str”)  ' 赋值

所以再测试下呗。
至于是不是四个反斜杠才是对的。我的理解的是要把g_reg这玩意儿再替换成两个反斜杠,当然需要4个反斜杠。



回复 支持 反对

使用道具 举报

发表于 2019-12-21 14:25:51 | 显示全部楼层   广东省揭阳市

取数 据文本为什么要加四个反斜杆!!!置属性里有个替换写错了,没发布的版本已经修正了,至于replace本来是留给取数 据文本用的,后面发布全部加上!
回复 支持 反对

使用道具 举报

结帖率:100% (48/48)
发表于 2019-12-21 14:07:48 | 显示全部楼层   河南省商丘市
可以非常不错之前碰到这样的问题!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

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