解析JSON-String失败

Parsing JSON-String fails

本文关键字:失败 JSON-String 解析      更新时间:2023-09-26

我读取了<script> - area a a STRING的内容。

$('script').each(function() {
        if (this.innerHTML.indexOf("AF_initDataCallback({key: '12'")>-1) {
            var complete=this.innerHTML;
            var startJSON=complete.indexOf('[');
            var endJSON=complete.lastIndexOf(']');
        //    var ar=eval(complete.substring(startJSON,endJSON));
            var ar2=$.parseJSON(complete.substring(startJSON,endJSON));
        }
    });

通过操作,我接收到以下内容,我想将其转换为"真正的"JSON

"[[[["23e29db10f09d296"]
,["Friends",,"Your real friends, the ones you feel comfortable sharing private details with.",,,,,,,2,2,,"00000000",1,1,1]
]
,[["3d5354de09baf36e"]
,["Family",,"Your close and extended family, with as many or as few in-laws as you want.",,,,,,,2,2,,"00000001",2,1,1]
]
,[["21f948f108db184f"]
,["Techie",,"",,,,,,,2,2,,"00000002",0,1,1]
]
,[["7373617e08bbeac4"]
,["funny",,,,,,,,,2,2,,"00000003",0,1,1]
]
,[["4ace516d8d62f107"]
,["Job",,,,,,,,,2,2,,"00000004",0,1,1]
]
,[["5594b1f8d1f1e37"]
,["Followers",,,,,,,,,2,2,,"00000005",0,1,1]
]
,[["2bc5e6a50e948a73"]
,["Job: Nice",,"",,,,,,,2,2,,"00000006",0,1,1]
]
,[["397a6a970cade6e8"]
,["rx8",,,,,,,,,2,2,,"00000007",0,1,1]
]
,[["13ea3c80821ad9c"]
,["promi",,,,,,,,,2,2,,"00000008",0,1,1]
]
,[["588da2260e942271"]
,["Firmen",,,,,,,,,2,2,,"00000009",0,1,1]
]
,[["337bb5990e4870e5"]
,["News",,,,,,,,,2,2,,"0000000a",0,1,1]
]
,[["4856572c0e1de220"]
,["Gaming",,,,,,,,,2,2,,"0000000b",0,1,1]
]
,[["3555f8f8bc5726f"]
,["mine",,,,,,,,,2,2,,"0000000c",0,1,1]
]
,[["6a01451c89ca64ae"]
,["Nette Leute",,"",,,,,,,2,2,,"0000000d",0,1,1]
]
,[["90ed4e98f5820f7"]
,["Hamburg",,"",,,,,,,2,2,,"0000000e",0,1,1]
]
,[["56bac85c894170b8"]
,["Job-Contacts",,"",,,,,,,2,2,,"0000000f",0,1,1]
]
,[["485ab93e8e81d66d"]
,["Fussball",,"",,,,,,,2,2,,"00000010",0,1,1]
]
,[["5ec1bb9409bad931"]
,["Journaille",,"",,,,,,,2,2,,"00000011",0,1,1]
]
,[["135ce0d189b1e545"]
,["mal schauen",,,,,,,,,2,2,,"00000012",,1,1]
]
,[["1ecbecf28ec85202"]
,["Lonely Circle",,"",,,,,,,2,2,,"00000013",0,1,1]
]
,[["38a246348c513a39"]
,["ignore",,,,,,,,,2,2,,"00000014",0,1,1]
]
,[["2f9c4a3c0e1f43b9"]
,["Vielschreiber",,"",,,,,,,2,2,,"00000015",0,1,1]
]
,[["7fd0532089537115"]
,["Bombenbauer",,"",,,,,,,2,2,,"00000016",0,1,1]
]
,[["765e2a78e64b1a6"]
,["Techsites",,"",,,,,,,2,2,,"00000017",0,1,1]
]
,[["598e823988cf077e"]
,["OK",,"",,,,,,,2,2,,"00000018",0,1,1]
]
,[["3edae58f895c3933"]
,["Star Trek",,,,,,,,,2,2,,"00000019",0,1,1]
]
,[["22ad725f89342264"]
,["Deppen",,,,,,,,,2,2,,"0000001a",0,1,1]
]
,[["254c1dec0d1bf02a"]
,["science",,,,,,,,,2,2,,"0000001b",0,1,1]
]
,[["2b4588aa898848a4"]
,["Undeutsch",,,,,,,,,2,2,,"0000001c",0,1,1]
]
,[["300a8672084d875b"]
,["eurpeans",,,,,,,,,2,2,,"0000001d",0,1,1]
]
,[["7de54f780f74eb6d"]
,["Autoren",,,,,,,,,2,2,,"0000001e",0,1,1]
]
,[["152f86d208909412"]
,["Unterhaltung",,,,,,,,,2,2,,"0000001f",0,0,1]
]
,[["6d96794b0f6ac25e"]
,["Bookmarks",,"",,,,,,,2,2,,"00000020",0,1,1]
]
,[["76c46c5489053a6b"]
,["Usertreffen",,,,,,,,,2,2,,"00000021",0,1,1]
]
,[["80d2af10e3778b1"]
,["g+j",,,,,,,,,2,2,,"00000022",0,1,1]
]
,[["e2e37408d864f3f"]
,["Ouya Follower",,,,,,,,,2,2,,"00000023",0,1,1]
]
,[["2916afdf8cbcf8e0"]
,["Ingress DE",,"",,,,,,,2,2,,"00000024",0,1,1]
]
,[["74bca48bb5e9bf"]
,["Ouya",,,,,,,,,2,2,,"00000025",0,1,1]
]
,[["63d74040084991b1"]
,["Spam",,,,,,,,,2,2,,"00000026",0,1,1]
]
,[["6d0e7cf08bee08d8"]
,["Geeks",,,,,,,,,2,2,,"00000027",0,1,1]
]
,[["1deb550f8d794be4"]
,["janzneu",,,,,,,,,2,2,,"00000028",0,0,1]
]
,[["6c02104c094dd570"]
,["urlaub",,,,,,,,,2,2,,"00000029",0,0,1]
]
,[["267736b60f3a46e7"]
,["Heimat",,,,,,,,,2,2,,"0000002a",0,1,1]
]
,[["7a7fd8738eedd564"]
,["Google",,,,,,,,,2,2,,"0000002b",0,0,1]
]
,[["3e6492e98907eda2"]
,["Politik",,,,,,,,,2,2,,"0000002c",0,0,1]
]
,[["42f28c228ae071ac"]
,["prio",,,,,,,,,2,2,,"0000002d",0,0,1]
]
,[["2c2fbd540de7df0f"]
,["Optimizer",,,,,,,,,2,2,,"0000002e",0,1,1]
]
]
"

所以我收到一个字符串,已经"看起来"像JSON和"是"一个真正的JSON之前。

但是当我尝试使用$.parseJSON将其转换为真实对象时,我得到错误

Uncaught SyntaxError: Unexpected token,

我是否必须在它之前做一些转换或在它周围包装一些东西?

(更新)我想要抓取的完整脚本区域:

<script>AF_initDataCallback({key: '12', isError:  false , data:[[[["23e29db10f09d296"]
,["Friends",,"Your real friends, the ones you feel comfortable sharing private details with.",,,,,,,2,2,,"00000000",1,1,1]
]
,[["3d5354de09baf36e"]
,["Family",,"Your close and extended family, with as many or as few in-laws as you want.",,,,,,,2,2,,"00000001",2,1,1]
]
,[["21f948f108db184f"]
,["Techie",,"",,,,,,,2,2,,"00000002",0,1,1]
]
,[["7373617e08bbeac4"]
,["funny",,,,,,,,,2,2,,"00000003",0,1,1]
]
,[["4ace516d8d62f107"]
,["Job",,,,,,,,,2,2,,"00000004",0,1,1]
]
,[["5594b1f8d1f1e37"]
,["Followers",,,,,,,,,2,2,,"00000005",0,1,1]
]
,[["2bc5e6a50e948a73"]
,["Job: Nice",,"",,,,,,,2,2,,"00000006",0,1,1]
]
,[["397a6a970cade6e8"]
,["rx8",,,,,,,,,2,2,,"00000007",0,1,1]
]
,[["13ea3c80821ad9c"]
,["promi",,,,,,,,,2,2,,"00000008",0,1,1]
]
,[["588da2260e942271"]
,["Firmen",,,,,,,,,2,2,,"00000009",0,1,1]
]
,[["337bb5990e4870e5"]
,["News",,,,,,,,,2,2,,"0000000a",0,1,1]
]
,[["4856572c0e1de220"]
,["Gaming",,,,,,,,,2,2,,"0000000b",0,1,1]
]
,[["3555f8f8bc5726f"]
,["mine",,,,,,,,,2,2,,"0000000c",0,1,1]
]
,[["6a01451c89ca64ae"]
,["Nette Leute",,"",,,,,,,2,2,,"0000000d",0,1,1]
]
,[["90ed4e98f5820f7"]
,["Hamburg",,"",,,,,,,2,2,,"0000000e",0,1,1]
]
,[["56bac85c894170b8"]
,["Job-Contacts",,"",,,,,,,2,2,,"0000000f",0,1,1]
]
,[["485ab93e8e81d66d"]
,["Fussball",,"",,,,,,,2,2,,"00000010",0,1,1]
]
,[["5ec1bb9409bad931"]
,["Journaille",,"",,,,,,,2,2,,"00000011",0,1,1]
]
,[["135ce0d189b1e545"]
,["mal schauen",,,,,,,,,2,2,,"00000012",,1,1]
]
,[["1ecbecf28ec85202"]
,["Lonely Circle",,"",,,,,,,2,2,,"00000013",0,1,1]
]
,[["38a246348c513a39"]
,["ignore",,,,,,,,,2,2,,"00000014",0,1,1]
]
,[["2f9c4a3c0e1f43b9"]
,["Vielschreiber",,"",,,,,,,2,2,,"00000015",0,1,1]
]
,[["7fd0532089537115"]
,["Bombenbauer",,"",,,,,,,2,2,,"00000016",0,1,1]
]
,[["765e2a78e64b1a6"]
,["Techsites",,"",,,,,,,2,2,,"00000017",0,1,1]
]
,[["598e823988cf077e"]
,["OK",,"",,,,,,,2,2,,"00000018",0,1,1]
]
,[["3edae58f895c3933"]
,["Star Trek",,,,,,,,,2,2,,"00000019",0,1,1]
]
,[["22ad725f89342264"]
,["Deppen",,,,,,,,,2,2,,"0000001a",0,1,1]
]
,[["254c1dec0d1bf02a"]
,["science",,,,,,,,,2,2,,"0000001b",0,1,1]
]
,[["2b4588aa898848a4"]
,["Undeutsch",,,,,,,,,2,2,,"0000001c",0,1,1]
]
,[["300a8672084d875b"]
,["eurpeans",,,,,,,,,2,2,,"0000001d",0,1,1]
]
,[["7de54f780f74eb6d"]
,["Autoren",,,,,,,,,2,2,,"0000001e",0,1,1]
]
,[["152f86d208909412"]
,["Unterhaltung",,,,,,,,,2,2,,"0000001f",0,0,1]
]
,[["6d96794b0f6ac25e"]
,["Bookmarks",,"",,,,,,,2,2,,"00000020",0,1,1]
]
,[["76c46c5489053a6b"]
,["Usertreffen",,,,,,,,,2,2,,"00000021",0,1,1]
]
,[["80d2af10e3778b1"]
,["g+j",,,,,,,,,2,2,,"00000022",0,1,1]
]
,[["e2e37408d864f3f"]
,["Ouya Follower",,,,,,,,,2,2,,"00000023",0,1,1]
]
,[["2916afdf8cbcf8e0"]
,["Ingress DE",,"",,,,,,,2,2,,"00000024",0,1,1]
]
,[["74bca48bb5e9bf"]
,["Ouya",,,,,,,,,2,2,,"00000025",0,1,1]
]
,[["63d74040084991b1"]
,["Spam",,,,,,,,,2,2,,"00000026",0,1,1]
]
,[["6d0e7cf08bee08d8"]
,["Geeks",,,,,,,,,2,2,,"00000027",0,1,1]
]
,[["1deb550f8d794be4"]
,["janzneu",,,,,,,,,2,2,,"00000028",0,0,1]
]
,[["6c02104c094dd570"]
,["urlaub",,,,,,,,,2,2,,"00000029",0,0,1]
]
,[["267736b60f3a46e7"]
,["Heimat",,,,,,,,,2,2,,"0000002a",0,1,1]
]
,[["7a7fd8738eedd564"]
,["Google",,,,,,,,,2,2,,"0000002b",0,0,1]
]
,[["3e6492e98907eda2"]
,["Politik",,,,,,,,,2,2,,"0000002c",0,0,1]
]
,[["42f28c228ae071ac"]
,["prio",,,,,,,,,2,2,,"0000002d",0,0,1]
]
,[["2c2fbd540de7df0f"]
,["Optimizer",,,,,,,,,2,2,,"0000002e",0,1,1]
]
]
]
});</script>

数组中的每个索引都必须有一个值。不能有[ something, , something ]

您可能需要在每对相邻的逗号之间使用null

在JSON中,空数组成员无效,例如:

["News",,,,,,,,,2,2,,"0000000a",0,1,1]

如果你去掉这些,它可能是有效的JSON:

["News",2,2,"0000000a",0,1,1]

实际上,这就是错误信息告诉你的:)。您应该阅读JSON规范,它真的很短。也可以运行验证器

根据@Quentin和@kapa的回答,我得出了以下解决方案:

var cstr=complete.substring(startJSON,endJSON+1);
while (cstr.indexOf(",,")>0) {
   cstr=cstr.replace(",,",",null,")                
};
var ar2=$.parseJSON(cstr);
老实说,我不喜欢它。我看它太脏了。