【问题标题】:Getting object key and value from objects in a text file从文本文件中的对象获取对象键和值
【发布时间】:2021-10-08 00:26:05
【问题描述】:

我正在使用 fetch 从 amazon polly 获取语音视位作为文本文件,并尝试获取每个对象键时间和值键的值,但每次我尝试它都会给我一个未定义的错误,当我尝试使用控制台.log(out[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
});

【问题讨论】:

  • 请勿发布代码图片!
  • out[i] 将只是您的 out 字符串中的一个字符。因此,尝试访问字符串字符上的属性"@value" 将给出undefined,因为字符串没有@value 属性。如果您可以控制url 端点及其返回的数据,那么您可以修复它,以便它以 JSON 格式返回,因为目前您拥有的不是有效的 JSON 字符串(因此为什么可以) t 用JSON.parse() 解析它)。如果亚马逊不提供提供有效 JSON 的 API(您可能正在查看错误的端点),我会感到惊讶
  • 欢迎来到 SO!我建议所有新用户访问How to Ask 以获取有关形成问题的提示。请注意,不建议发布代码或文本的图片,而是在问题正文中包含文本。祝你好运,编码愉快!

标签: javascript


【解决方案1】:

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

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);

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

【讨论】:

  • 你知道我可以把它转换成 JSON 的方法吗
  • @ChrisYoung - 查看编辑
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-02
相关资源
最近更新 更多