无法以任何方式操作 JSON 对象



我正在Cargocollective上创建一个网站,并使用Javascript自定义其中的部分内容(只允许使用香草(。我发现Cargo在<script type="text/json">元素中使用JSON表示法将整个网站存储在同一个HTML中。

我想从那些JSON对象中提取信息,以便在脚本中使用。我可以使用查询选择器来选择JSON对象。这些对象看起来像一个JSON对象,typeof返回对象。

然而,如果我尝试做一些类似myObject.key或myObject[0].key的事情,我会得到";未定义";。如果我尝试JSON.parse;JSON中位于位置1"的意外标记o;。JSON.stringify返回{}。

这就是HTML中的样子:(它很长,有4000个字符,这只是一个摘录(

<script type="text/json" data-set="ScaffoldingData" >{"id":0,"title":"Sandra Javera","project_url":0,"set_id":0,"is_homepage":false,"pin":false,"is_set":true,"in_nav":false,.........},{"id":14844451,"site_id":711279,"project_url":"Lisboa-copy","direct_link":"https://sandrajavera.com/Lisboa-copy","type":"page","title":"Lisboa copy","title_no_html":"Lisboa copy","tags":"","display":true,"pin":false,"pin_options":null,"in_nav":false,"is_homepage":false,"backdrop_enabled":false,"is_set":false,"stack":false,"excerpt":"+nttn..........}"</script>

因此JSON对象具有类似的结构

{
"key": value,
"key": value,
"key": value
},
{
"key": value,
"key": value,
"key": value
},
{
"key": value,
"key": value,
"key": value
}

所以它实际上是一个对象数组,即使没有括号。

网站是sandrajavera.com。如有任何帮助,我们将不胜感激。非常感谢。

将文本包装在[]中以使结构有效,然后对其进行解析。

添加包装数组大括号最好在源代码处完成,但是

const str = document.querySelector('script[data-set]').textContent.trim()
const data = JSON.parse(`[${str}]`)
console.log(data)
<script type="text/json" data-set="ScaffoldingData" >
{ "id": 1,"txt": "foo"}, { "id": 2, "txt": "bar" }
</script>

最新更新