gpt4 book ai didi

jquery - parseJSON 失败,而 json_decode 有效

转载 作者:行者123 更新时间:2023-12-03 23:03:31 24 4
gpt4 key购买 nike

我已经为此苦苦挣扎了一段时间,我有一个字符串化的 JSON 对象存储在数据库中,一旦我检索它,我就用 PHP 和 jQuery 对其进行解码,PHP 工作正常,jQuery 失败,这是代码

var data = $.parseJSON('{"page_name":"Test page","page_title":"Test title","site":"0","page_url":"http:\/\/saulius.epickitdev.com\/test-page","page_type":"1","bg_type":"gradient","background_img_url":"","fill_bg_color":"","background_color":"","background_gradient_top":"5194c4","background_gradient_bottom":"000000","video_type":"yt","youtube_video_url":"","youtube_video_start_from":"","mp4_video_url":"","webm_video_url":"","ogg_video_url":"","width_type":"fixed","width_padding":"10","layout_color":"cc25cc","border_size":"3","border_color":"5a7de6","container_position":"middle","container_position_left":"","container_position_right":"","meta_title":"mtest","meta_description":"mdesc","meta_keyword":"mkey","fb_title":"ftitle","fb_description":"fdesc","header_script":{"1":"<meta name=\"keywords\" content=\"h1\">","2":"<meta name=\"keywords\" content=\"h2\">"},"footer_script":[""],"redirect_url":"","exit_message":""}');
console.log(data);

现在它告诉我错误是:

SyntaxError: JSON.parse: expected ',' or '}' after property value in object at line 1 column 766 of the JSON data

位于以下位置的“=”:

"<meta name=\"keywords\" content=\"h1\">"

有人有任何线索吗?我尝试了不同的解析器,但我完全坚持这个!

最佳答案

您需要将字符串中的 \ 字符双重编码为​​ \\

var s = '{"page_name":"Test page","page_title":"Test title","site":"0","page_url":"http://saulius.epickitdev.com/test-page","page_type":"1","bg_type":"gradient","background_img_url":"","fill_bg_color":"","background_color":"","background_gradient_top":"5194c4","background_gradient_bottom":"000000","video_type":"yt","youtube_video_url":"","youtube_video_start_from":"","mp4_video_url":"","webm_video_url":"","ogg_video_url":"","width_type":"fixed","width_padding":"10","layout_color":"cc25cc","border_size":"3","border_color":"5a7de6","container_position":"middle","container_position_left":"","container_position_right":"","meta_title":"mtest","meta_description":"mdesc","meta_keyword":"mkey","fb_title":"ftitle","fb_description":"fdesc","header_script":{"1":"<meta name=\\"keywords\\" content=\\"h1\\">","2":"<meta name=\\"keywords\\" content=\\"h2\\">"},"footer_script":[""],"redirect_url":"","exit_message":""}'
$.parseJSON(s)

这是因为它们是字符串内部的转义符。

顶级字符串是整个值,因此展开一级转义会导致这种情况,

{"1":"<meta name="keywords" content="h1">"} #Invalid JSON

这是无效的,因为值中的引号不再转义,因为顶级 JavaScript 字符串解开它们。当 JavaScript 解释器读入该字符串文字时,所有 \ 字符都会展开一级,这意味着 \" 变为 " 。然后,需要处理 JSON 字符串,但它不再有效,因为您打算转义的引号现在未转义(实际上,它们从未真正转义,它们只是看起来如此。 ) 当你使用单引号时,你不需要转义",但你总是可以转义任何东西,如果它不是特殊字符,它什么也不做。

因此,为了在处理顶级字符串后仍然对引号进行转义,您需要对 \ 本身进行转义。

var s = '{"1":"<meta name=\\"keywords\\" content=\\"h1\\">"}'
console.log(s) //'{"1":"<meta name=\"keywords\" content=\"h1\">"}'
$.parseJSON(s)

关于jquery - parseJSON 失败,而 json_decode 有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25400313/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com