【发布时间】:2023-04-11 07:56:01
【问题描述】:
我下载了一些网页,其中包含嵌入到 javascript 中的 JSON 代码。我需要对其进行解码,但它是不正确 JSON,并且包含单引号和双引号,这会导致解码子程序出错。
注意:JSON 以块形式提取到字符串变量中,DATA 块代表某种形式的错误 JSON 代码(主要问题在于代表网站访问者客户端输入的部分),JSON 具有相当深度递归结构。
到目前为止,我找不到比附加的仍然不正确的波纹管代码更好的解决方案。
有没有更好的方法医生收到 JSON 代码? [可能在正则表达式中使用 (??{ code})]
use strict;
use warnings;
use diagnostics;
while( <DATA> ) {
chomp;
print "IN: $_\n";
s/"/'/g;
print "OUT: $_\n" if s/'(.*?)'\s*:\s*'(.*?)'(,|\s*\})/"$1": "$2"$3/g;
}
__DATA__
{ "d1": "some data here", "d2":"some "data" here", "d3": "some "data" here "year"", "d4": { "x1": "some "data" here" } }
{ "d2": "some data here", "d2":"some "data" here", "d3": "some "data" here "year"" }
{ 'd3': 'some data here', "d2":"some "data" here", "d3": "some "data" here "year"" }
{ "d4": 'some data here', "d2":"some "data" here", "d3": "some "data" here "year"", "d4": { "x1": "some "data" here" } }
{ 'd5': "some data here", "d2":"some "data" here", "d3": "some "data" here "year"" }
输出
IN: { "d1": "some data here", "d2":"some "data" here", "d3": "some "data" here "year"", "d4": { "x1": "some "data" here" } }
OUT: { "d1": "some data here", "d2": "some 'data' here", "d3": "some 'data' here 'year'", "d4': { 'x1": "some 'data' here" } }
IN: { "d2": "some data here", "d2":"some "data" here", "d3": "some "data" here "year"" }
OUT: { "d2": "some data here", "d2": "some 'data' here", "d3": "some 'data' here 'year'" }
IN: { 'd3': 'some data here', "d2":"some "data" here", "d3": "some "data" here "year"" }
OUT: { "d3": "some data here", "d2": "some 'data' here", "d3": "some 'data' here 'year'" }
IN: { "d4": 'some data here', "d2":"some "data" here", "d3": "some "data" here "year"", "d4": { "x1": "some "data" here" } }
OUT: { "d4": "some data here", "d2": "some 'data' here", "d3": "some 'data' here 'year'", "d4': { 'x1": "some 'data' here" } }
IN: { 'd5': "some data here", "d2":"some "data" here", "d3": "some "data" here "year"" }
OUT: { "d5": "some data here", "d2": "some 'data' here", "d3": "some 'data' here 'year'" }
【问题讨论】:
-
如果您确定您所追求的数据(内容方面)不包含
',那么简单地将所有单引号替换为双引号会更容易吗?或者,只需将'替换为["]`,将其放入一个组中,然后使用它。 -
JSON 可能有很多包含,例如
I'm、name's、name"s、"2019"、they've、It's... 没有一致性的地方应该是@ 987654333@ 用户输入"例如I"m- 一些输入是西里尔语,例如{"title": "описание наименование фильма "новый 2019" сериал"}。 -
在一般情况下,不,没有办法预测哪些引号格式正确。如果键像您的示例所暗示的那样单调,那么简单的正则表达式应该能够达到可接受的准确性,尽管您可能仍希望执行手动审查。
-
在this post(和 cmets)的第二部分查看一些想法/正则表达式来修复稍微无效的 JSON
-
根据 OP 的 cmets,问题是错误的。 OP 实际上并没有遇到诸如在他们的问题中找到的数据,而是有效的 JavaScript。投票结束,直到这个问题得到解决。
标签: json regex perl double-quotes