首页 > 解决方案 > 从文本文件中的对象获取对象键和值

问题描述

我正在使用 fetch 从 amazon polly 获取语音视位作为文本文件,并尝试获取每个对象键时间和值键的值,但每次我尝试它都会给我一个未定义的错误,当我尝试使用 console.log (出[i]);它只是给了我大括号中的第一个引号。我什至尝试将 JSON.parse(out) 添加到我的代码中,但它给了我一个 Uncaught (in promise) SyntaxError: Unexpected token { in JSON at position 39 错误。如果您需要查看我的源代码,我已将其附在下面。我还附上了这个问题的链接,一个显示我的文本文件的内容,另一个显示我在使用 JSON.parse 之前遇到的错误。我希望它有所帮助。

var viseme    = 'value';
var time      = 'time';
var bracket   = '}';
var jsonIndex = -1;
var itemHTML  = '';
var number    = '4';
               
fetch(url)
.then(res => res.text())
.then((out) => {
  console.log("Checkout this JSON!", out);
  console.log(out.substring(27, 37));
  var jsonParsed = JSON.parse(out);
  for(var i of Array(12).keys()) {
    console.log(out[1]);
    var anotherResJson = out[i]['@value'];
    console.log("jsonParsed[",i,"][@value]:",anotherResJson);
  }
})
.catch(error => {
  throw error
});

文本文件的内容

JSON.parse 之前的输出

标签: javascript

解决方案


从我在屏幕截图中看到的内容来看,您的文件内容似乎不是有效的 JSON。我看到的是几个单独的对象,在值和键周围有双引号,但它们用换行符分隔。这不是有效的 JSON,不会解析 - 在控制台打开的情况下运行以下代码段:

const notActuallyJson = '{ "Batgirl": "Barbara Gordon" }\n{ "Supergirl": "Kara Zor-El" }';
console.log(notActuallyJson);
const parsed = JSON.parse(notActuallyJson);
console.log(parsed);

如果您正在寻找与此类似的有效 JSON 数据结构,您需要一个数组 ( []),其中这些对象以逗号分隔:

const validJson = '[\n{ "Batgirl": "Barbara Gordon" },\n{ "Supergirl": "Kara Zor-El" }\n]';
console.log(validJson);
const parsed = JSON.parse(validJson);
console.log(parsed);

更新

将文件内容转换为 JSON

很难确切地知道您的文件内容的情况,因为您没有将它们作为文本共享——您只是将它们作为图像共享。但是,如果我的预感是正确的并且它们只是用换行符分隔的有效 JSON 对象,您可以用括号将它们包裹起来并用逗号分隔它们,如下所示:

const notActuallyJson = '{ "Batgirl": "Barbara Gordon" }\n{ "Supergirl": "Kara Zor-El" }';
const convertedToActualJson = `[${notActuallyJson.split('\n').join(',')}]`;
console.log(convertedToActualJson);
const parsed = JSON.parse(convertedToActualJson);
console.log(parsed);

如果您的文件内容不符合该描述,那么您将需要一个更加定制的解决方案,您可能应该将其发布在一个单独的问题中,因为它与原始帖子有很大不同。


推荐阅读