javascript - 为什么我的 JSON 对象键的值未定义?
问题描述
我需要解析 JSON,但对象键的值未定义:
const MY_JSON_FILE = "{ \"version\": \"1.0\", \"result\": 4, \"id\": \"1\" }\x00"
let json = JSON.stringify(MY_JSON_FILE);
const blob = new Blob([json], {type:"application/json"});
const fr = new FileReader();
var res;
fr.onload = () => {
console.log('done', fr.readyState);
console.log('reader result: ', fr.result);
res = JSON.parse(fr.result);
console.log(Object.keys(res));
console.log('parsed: ' + res);
console.log(res.id);
console.log(res.result);
console.log(res.version);
}
fr.readAsText(blob);
解析后我的对象键的值未定义。如何成功解析和访问对象键的值?
解决方案
- 你从一个代表一个对象的 JSON 字符串开始(几乎,最后有一些无效数据)。
- 您可以
JSON.stringify
将其转换为表示 1 中的字符串的 JSON 字符串。 - 您将其转换为文件,然后读取它以返回您在 2 处的字符串
- 您将该字符串解析为 JSON 以获取您在 1 处的字符串
- 您阅读了该字符串的对象键
即,您将对象编码为 JSON两次并仅解码一次,然后尝试将 JSON 字符串视为 JSON 表示的对象。
从您的原始字符串中删除无效数据并将第 4 步中的 JSON 解析为一个对象……最好完全跳过第 2 步和第 3 步。
const MY_JSON_FILE = "{ \"version\": \"1.0\", \"result\": 4, \"id\": \"1\" }"
const data = JSON.parse(MY_JSON_FILE);
console.log(Object.keys(data));
推荐阅读
- jenkins - 我需要始终在 Jenkins 多分支管道中构建所有分支
- c - 我正在尝试搜索文件计数。使用二进制搜索遇到的“C”保留字
- angular - 如何将纪元时间转换为当地时间?
- javascript - 单击多级下拉菜单不显示菜单
- git - 安装 Git 的正确位置是什么?
- dynamics-crm - 自定义命令启用规则未在视图上的按钮上运行
- reactjs - 谷歌没有显示 React-Helmet 的标题和描述
- azure - Azure ARM“代码”:尝试更新 vnet 时出现“InUseSubnetCannotBeDeleted”
- python - 为什么我会收到“int is not subscriptable”错误消息?
- amazon-web-services - 使用 AWS::CloudFormation::Init 的好处