首页 > 解决方案 > 为什么我的 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);

解析后我的对象键的值未定义。如何成功解析和访问对象键的值?

标签: javascriptfilereader

解决方案


  1. 你从一个代表一个对象的 JSON 字符串开始(几乎,最后有一些无效数据)。
  2. 您可以JSON.stringify将其转换为表示 1 中的字符串的 JSON 字符串。
  3. 您将其转换为文件,然后读取它以返回您在 2 处的字符串
  4. 您将该字符串解析为 JSON 以获取您在 1 处的字符串
  5. 您阅读了该字符串的对象键

即,您将对象编码为 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));


推荐阅读