Javascript 解析包含HTML内容的JSON时,JSON.parse抛出错误

Javascript 解析包含HTML内容的JSON时,JSON.parse抛出错误,javascript,Javascript,我尝试使用以下代码,但JSON解析器上不断出现错误 var data = JSON.parse('[{"thisFieldname":"item-company-1","thisFieldHTML":"\n\t\t\t\t\t<div class=\"new-company-field field-item\">\n\t\t\t\t\t\t<div class=\"fake-data\">\n\t\t\t\t\t\t\tCompany\n\t\t\t\t\t\t</

我尝试使用以下代码,但JSON解析器上不断出现错误

var data = JSON.parse('[{"thisFieldname":"item-company-1","thisFieldHTML":"\n\t\t\t\t\t<div class=\"new-company-field field-item\">\n\t\t\t\t\t\t<div class=\"fake-data\">\n\t\t\t\t\t\t\tCompany\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t<div class=\"ui-resizable-handle ui-resizable-e\" style=\"z-index: 90; display: block;\"></div><div class=\"ui-resizable-handle ui-resizable-s\" style=\"z-index: 90; display: block;\"></div><div class=\"ui-resizable-handle ui-resizable-se ui-icon ui-icon-gripsmall-diagonal-se\" style=\"z-index: 90; display: block;\"></div>","dataFieldName":"item-company-1","locationIndex":"0","locationLeft":"427.891px","locationTop":"88.5625px","itemWidth":"100px","itemHeight":"34px","fieldRole":"","fieldDefault":"","fieldTooltip":"","fieldValidationRule":"","fieldValidationCharSet":"","fieldValidationDateFormat":"","fieldDisplayFormat":"","fieldValidationCountry":"","fieldValidationMaxLen":"","fieldValidationMinVal":"","fieldValidationMaxVal":"","fieldValidationRegExp":"","fieldValidationFormula":"","fieldValidationErrMsg":"","valid":"","condition-field":"","condition-type":"","condition-value-select":"","fontName":"","fontSize":"","fontAlign":"","fieldColorPicker":"","fieldRequired":"false","fieldReadOnly":"false","fieldMasked":"false","fieldMultiline":"false"}]');
当我在JavaScript字符串文本中插入新行字符时,JSON被认为是有效的JSON。JSON字符串中禁止使用文字新行

\在JavaScript字符串中,文本插入一个字符。JSON字符串中的文字将终止该字符串

问题不在于HTML。这是特殊的字符。您需要将\s转义为\\,以便转义序列由JSON解析器而不是JavaScript编译器计算

这就是说,生成JSON然后将其作为字符串文本嵌入并立即解析似乎过于复杂和毫无意义。只需首先使用JS数组文本并跳过所有嵌套。

\n在JavaScript字符串文本中插入新行字符。JSON字符串中禁止使用文字新行

\在JavaScript字符串中,文本插入一个字符。JSON字符串中的文字将终止该字符串

问题不在于HTML。这是特殊的字符。您需要将\s转义为\\,以便转义序列由JSON解析器而不是JavaScript编译器计算


这就是说,生成JSON然后将其作为字符串文本嵌入并立即解析似乎过于复杂和毫无意义。首先使用JS数组文本,跳过所有嵌套。

您的推理是错误的。您检查了表达式expr是否是有效的JSON,然后认为JSON.parse'expr'可以工作

问题是字符串文本不是这样工作的

表达式\t是有效的JSON,但字符串文字'\t'将成为无效的JSON字符串。如果要获取字符串\t,则需要字符串文字'\\t'

因此,您可以转义所有这些字符:


console.logJSON.parse[目前,该现场名称名称名称如下如下:\ \该现场名称名称如下如下:1 1 1 1,,,,\该现场现场名称如下如下1,,,,\ t\\t\\t \\\\t \\\t\\t \\\t \\\t\\t\\试图试图试图试图试图试图试图10 10 10 10 10 10 10 10,,,,\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\德福lt\:\,\fieldTooltip\:\,\fieldValidationRule\:\,\fieldValidationCharSet\:\,\fieldValidationDateFormat\:\,\fieldDisplayFormat\,\fieldValidationCountry\:\,\fieldValidationMaxLen\,\fieldValidationMinVal\,\fieldValidationMaxVal\:\,\fieldValidationRegExp\,\fieldValidationFormula\,\FieldValidationRRMsg\,\fieldValidationMaxLen\,\fieldValidationMinVal\,\conditionld\:\,\condition type\:\,\condition value select\:\,\fontName\:\,\fontSize\:\,\fontAlign\:\,\fieldColorPicker\:\,\fieldRequired\:\false\,\fieldReadOnly\:\false\,\fieldMasked\:\false\,\fieldMultiline\:\false\]您的推理是错误的。您检查了表达式expr是否是有效的JSON,然后认为JSON.parse'expr'可以工作

问题是字符串文本不是这样工作的

表达式\t是有效的JSON,但字符串文字'\t'将成为无效的JSON字符串。如果要获取字符串\t,则需要字符串文字'\\t'

因此,您可以转义所有这些字符:


console.logJSON.parse[目前,该现场名称名称名称如下如下:\ \该现场名称名称如下如下:1 1 1 1,,,,\该现场现场名称如下如下1,,,,\ t\\t\\t \\\\t \\\t\\t \\\t \\\t\\t\\试图试图试图试图试图试图试图10 10 10 10 10 10 10 10,,,,\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\德福lt\:\,\fieldTooltip\:\,\fieldValidationRule\:\,\fieldValidationCharSet\:\,\fieldValidationDateFormat\:\,\fieldDisplayFormat\,\fieldValidationCountry\:\,\fieldValidationMaxLen\,\fieldValidationMinVal\,\fieldValidationMaxVal\:\,\fieldValidationRegExp\,\fieldValidationFormula\,\FieldValidationRRMsg\,\fieldValidationMaxLen\,\fieldValidationMinVal\,\conditionld\:\,\condition type\:\,\condition value select\:\,\fontName\:\,\fontSize\:\,\fontAlign\:\,\fieldColorPicker\:\,\fieldRequired\:\false\,\fieldReadOnly\:\false\,\fieldMasked\:\false\,\fieldMultiline\:\false\};您遇到了错误,因为您试图将对象转换为字符串,然后对其进行解析,但没有正确的转换

您可以通过两种方式使用该对象

直接用作对象 首先使用json.stringify将对象转换为正确的json字符串,然后解析它 示例代码

data = [{"thisFieldname":"item-company-   1","thisFieldHTML":"\n\t\t\t\t\t<div class=\"new-company-field field-item\">\n\t\t\t\t\t\t<div class=\"fake-data\">\n\t\t\t\t\t\t\tCompany\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t<div class=\"ui-resizable-handle ui-resizable-e\" style=\"z-index: 90; display: block;\"></div><div class=\"ui-resizable-handle ui-resizable-s\" style=\"z-index: 90; display: block;\"></div><div class=\"ui-resizable-handle ui-resizable-se ui-icon ui-icon-gripsmall-diagonal-se\" style=\"z-index: 90; display: block;\"></div>","dataFieldName":"item-company-1","locationIndex":"0","locationLeft":"427.891px","locationTop":"88.5625px","itemWidth":"100px","itemHeight":"34px","fieldRole":"","fieldDefault":"","fieldTooltip":"","fieldValidationRule":"","fieldValidationCharSet":"","fieldValidationDateFormat":"","fieldDisplayFormat":"","fieldValidationCountry":"","fieldValidationMaxLen":"","fieldValidationMinVal":"","fieldValidationMaxVal":"","fieldValidationRegExp":"","fieldValidationFormula":"","fieldValidationErrMsg":"","valid":"","condition-field":"","condition-type":"","condition-value-select":"","fontName":"","fontSize":"","fontAlign":"","fieldColorPicker":"","fieldRequired":"false","fieldReadOnly":"false","fieldMasked":"false","fieldMultiline":"false"}];



data = JSON.parse(JSON.stringify([{"thisFieldname":"item-company-   1","thisFieldHTML":"\n\t\t\t\t\t<div class=\"new-company-field field-item\">\n\t\t\t\t\t\t<div class=\"fake-data\">\n\t\t\t\t\t\t\tCompany\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t<div class=\"ui-resizable-handle ui-resizable-e\" style=\"z-index: 90; display: block;\"></div><div class=\"ui-resizable-handle ui-resizable-s\" style=\"z-index: 90; display: block;\"></div><div class=\"ui-resizable-handle ui-resizable-se ui-icon ui-icon-gripsmall-diagonal-se\" style=\"z-index: 90; display: block;\"></div>","dataFieldName":"item-company-1","locationIndex":"0","locationLeft":"427.891px","locationTop":"88.5625px","itemWidth":"100px","itemHeight":"34px","fieldRole":"","fieldDefault":"","fieldTooltip":"","fieldValidationRule":"","fieldValidationCharSet":"","fieldValidationDateFormat":"","fieldDisplayFormat":"","fieldValidationCountry":"","fieldValidationMaxLen":"","fieldValidationMinVal":"","fieldValidationMaxVal":"","fieldValidationRegExp":"","fieldValidationFormula":"","fieldValidationErrMsg":"","valid":"","condition-field":"","condition-type":"","condition-value-select":"","fontName":"","fontSize":"","fontAlign":"","fieldColorPicker":"","fieldRequired":"false","fieldReadOnly":"false","fieldMasked":"false","fieldMultiline":"false"}]));

出现错误是因为您试图将和对象转换为字符串,然后在没有正确转换的情况下对其进行解析

您可以通过两种方式使用该对象

直接用作对象 首先使用json.stringify将对象转换为正确的json字符串,然后解析它 示例代码

data = [{"thisFieldname":"item-company-   1","thisFieldHTML":"\n\t\t\t\t\t<div class=\"new-company-field field-item\">\n\t\t\t\t\t\t<div class=\"fake-data\">\n\t\t\t\t\t\t\tCompany\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t<div class=\"ui-resizable-handle ui-resizable-e\" style=\"z-index: 90; display: block;\"></div><div class=\"ui-resizable-handle ui-resizable-s\" style=\"z-index: 90; display: block;\"></div><div class=\"ui-resizable-handle ui-resizable-se ui-icon ui-icon-gripsmall-diagonal-se\" style=\"z-index: 90; display: block;\"></div>","dataFieldName":"item-company-1","locationIndex":"0","locationLeft":"427.891px","locationTop":"88.5625px","itemWidth":"100px","itemHeight":"34px","fieldRole":"","fieldDefault":"","fieldTooltip":"","fieldValidationRule":"","fieldValidationCharSet":"","fieldValidationDateFormat":"","fieldDisplayFormat":"","fieldValidationCountry":"","fieldValidationMaxLen":"","fieldValidationMinVal":"","fieldValidationMaxVal":"","fieldValidationRegExp":"","fieldValidationFormula":"","fieldValidationErrMsg":"","valid":"","condition-field":"","condition-type":"","condition-value-select":"","fontName":"","fontSize":"","fontAlign":"","fieldColorPicker":"","fieldRequired":"false","fieldReadOnly":"false","fieldMasked":"false","fieldMultiline":"false"}];



data = JSON.parse(JSON.stringify([{"thisFieldname":"item-company-   1","thisFieldHTML":"\n\t\t\t\t\t<div class=\"new-company-field field-item\">\n\t\t\t\t\t\t<div class=\"fake-data\">\n\t\t\t\t\t\t\tCompany\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t<div class=\"ui-resizable-handle ui-resizable-e\" style=\"z-index: 90; display: block;\"></div><div class=\"ui-resizable-handle ui-resizable-s\" style=\"z-index: 90; display: block;\"></div><div class=\"ui-resizable-handle ui-resizable-se ui-icon ui-icon-gripsmall-diagonal-se\" style=\"z-index: 90; display: block;\"></div>","dataFieldName":"item-company-1","locationIndex":"0","locationLeft":"427.891px","locationTop":"88.5625px","itemWidth":"100px","itemHeight":"34px","fieldRole":"","fieldDefault":"","fieldTooltip":"","fieldValidationRule":"","fieldValidationCharSet":"","fieldValidationDateFormat":"","fieldDisplayFormat":"","fieldValidationCountry":"","fieldValidationMaxLen":"","fieldValidationMinVal":"","fieldValidationMaxVal":"","fieldValidationRegExp":"","fieldValidationFormula":"","fieldValidationErrMsg":"","valid":"","condition-field":"","condition-type":"","condition-value-select":"","fontName":"","fontSize":"","fontAlign":"","fieldColorPicker":"","fieldRequired":"false","fieldReadOnly":"false","fieldMasked":"false","fieldMultiline":"false"}]));

另一种避免其他答案解释的字符串文字扩展的方法是使用字符串 。从ES6开始提供原始数据

var data=JSON.parseString.raw`[{thisFieldname:item-company-1,thisFieldHTML:\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t公司\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t,数据字段名:item-company-1,位置索引:0,位置左侧:427.891px,位置顶部:88.5625px,项目宽度:100px,高度:34px,字段提示,默认值:FieldType,字段集:Chari:onDateFormat:,fieldDisplayFormat:,fieldValidationCountry:,fieldValidationMaxLen:,fieldValidationMinVal:,fieldValidationMaxVal:,fieldValidationRegExp:,fieldValidationFormula:,FieldValidationRRMsg:,Validate:,条件字段:,条件类型:,条件值选择:,fontName:,fontSize:,fontAlign:,fieldColorPicker:,fieldRequired:false,fieldReadOnly:false,fieldMasked:false,fieldMultiline:false}]`; 简短示例:

String.raw`Hi\n${2+3}!`; //“Hi\n5!”,在“Hi”之后的字符 //不是换行符, //“\”和“n”是两个字符。
阅读更多关于

的内容另一个避免其他答案中解释的字符串文字扩展的选项是使用自ES6以来提供的string.raw

var data=JSON.parseString.raw`[{thisFieldname:item-company-1,thisFieldHTML:\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t公司\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t,数据字段名:item-company-1,位置索引:0,位置左侧:427.891px,位置顶部:88.5625px,项目宽度:100px,高度:34px,字段提示,默认值:FieldType,字段集:Chari:onDateFormat:,fieldDisplayFormat:,fieldValidationCountry:,fieldValidationMaxLen:,fieldValidationMinVal:,fieldValidationMaxVal:,fieldValidationRegExp:,fieldValidationFormula:,FieldValidationRRMsg:,Validate:,条件字段:,条件类型:,条件值选择:,fontName:,fontSize:,fontAlign:,fieldColorPicker:,fieldRequired:false,fieldReadOnly:false,fieldMasked:false,fieldMultiline:false}]`; 简短示例:

String.raw`Hi\n${2+3}!`; //“Hi\n5!”,在“Hi”之后的字符 //不是换行符, //“\”和“n”是两个字符。
阅读更多关于

JSON代码的源代码是什么?如果JSON是硬编码的,那么您应该直接将其分配给数据变量,而不调用JSON.parse.JSON正在从服务器发送并存储在一个字段中作为值,以便javascript可以访问它。这是我能想到的将JSON直接从PHP传递给J的唯一方法avascript是否能够通过JSON代码的源代码进行排序?如果JSON是硬编码的,那么您应该直接将其分配给数据变量,而不调用JSON.parse.JSON正在从服务器发送下来并存储在字段中作为值,以便javascript可以访问它。这是我可以想到的传递JSON d的唯一方法直接从PHP到Javascript,以便能够进行排序。我应该如何在\上执行str.replace,这样我就可以将它们全部替换为\\?我尝试过的所有组合一直在说它无效syntax@eqiz不要这样做。在JS源代码中使用硬编码的JSON是毫无意义的。它不是硬编码的……它从服务器中提取并存储为本地variable,以便从PHP访问Javascript。我没有choice@eqiz如果你从服务器而不是通过JS文本获取,你就不会有这个问题。我有一个php页面,它将JSON发送到一个字段,并通过JQUERY将值设置为JSON。然后我将JSON拉到javascript中进行筛选。我没有其他选择,只能这样做是这样的。我没有其他方法将PHP发送到JavaScription。我如何在\上执行str.replace,这样我就可以用\\?所有的组合替换它们?我一直在说它是无效的syntax@eqiz不要这样做。在JS源代码中使用硬编码的JSON是毫无意义的。它不是硬编码的……它从服务器中提取并存储为loc变量,以便从PHP访问Javascript。我没有choice@eqiz如果您从服务器而不是通过JS文本获得它,您就不会有这个问题。我有一个php页面,它将JSON发送到一个字段,并通过JQUERY将值设置为JSON。然后我将JSON拉入javascript进行筛选。除了我没有其他方法可以将PHP发送到JavaScript,这只是一个有趣的旁白:Mozilla不止一次明确地告诉Firefox插件开发人员:将大型JavaScript对象文本从代码中移出,格式化为JSON,将它们放在单独的文件中,然后使用JavaScript使JSON被读取/解析d、 请参阅:有趣的旁白:Mozilla不止一次明确告诉Firefox插件开发人员:将大型JavaScript对象文本从代码中移出,格式化为JSON,将其放在单独的文件中,然后使用JavaScript读取/解析JSON。请参阅: