在 JavaScript 和 JSON 中,为什么 str 的结果 = JSON.stringify(obj);等于 {}?



我是最近自学成才的JavaScript&JSON发起。这个demi项目是我第二个JavaScript项目的废料。请对我温柔。

我正在尝试输入JSON文件,串联它并输出结果字符串。该文件是JavaScript对象。但是当我执行语句str = JSON.stringify(obj);时,我会得到str === {}

的结果

为什么Stringified文件对象等于{}?如何使其成为等于JSON文件字符串的字符串?

JavaScript是:

function handleFileSelect(evt) {
    var files = evt.target.files; // FileList object
    // files is a FileList of File objects. List some properties.
    var output = [];
    for (var i = 0, f; f = files[i]; i++) {
        output.push('<li><strong>', escape(f.name), '</strong> (', f.type || 'n/a',
        ') - ', f.size, ' bytes, last modified: ' f.lastModifiedDate ?
        f.lastModifiedDate.toLocaleDateString() : 'n/a', '</li>');
    }
    document.getElementById('OutputArea').innerHTML = '<ul>' +
    output.join('') + '</ul>';
    var obj = files[0];
    var str = JSON.stringify(obj);
    document.getElementById( 'OutputArea' ).innerHTML += "obj : " +
    obj + "<br><br>obj stringified : " + str;
}   // end def fn handleFileSelect
// set event listener on InputArea
document.getElementById('InputArea').addEventListener('change',
handleFileSelect, false);

HTML是:

<html lan="en">
   <head>
      <title="A JSON exercise"></title>
   </head>
   <body>
      <input id="InputArea" name="files[]" type="file" accept="application/json"
      multiple />
      <output id="OutputArea"</output>
   </body>
</html>

JavaScript的相关输出是:

obj: [object File]
object stringified : {}

JSON文件,用于Mac的BBEDIT,并保存为Unicode(UTF-8)文件,为:

{
"FHC-Class-Schedule" : [
    {
        "time" : "0830",
        "room" : "A-I",
        "classTitle" : 
            "Keynote Address",
        "classDescription" : 
            "Room I [content to come]",
        "instructorName" : "Crista Cowen",
        "instructorGender" : "female",
        "instructorBio" : 
            "Crista Cowan has been employed by Ancestry.com since 2004.",
        "instructorImgHref" : 
            ""
    }
  ]
}

Codepen有一支笔:JSON练习。您将需要一个本地的JSON文件来输入。

任何帮助都将不胜感激

编辑01:

好吧,我重新格式化了JSON文件,并使用在线JSON验证器(免费在线JSON FERMATTER)对其进行了验证。我仍然得到相同的结果。(我还插入了一个新的第一段。)

JSON.stringify(spec,mdn)仅包含适合以下标准的所有> 的属性:

  • 它们是自己的属性(不是对象从其原型继承的)
  • 它们是枚举属性(例如,在for-in循环中显示的那种)
  • 他们的名字是字符串(不是符号)
  • 他们的价值不是undefined或功能

您要试图转换为JSON的对象似乎只具有继承或不可依赖的属性,而值为undefined或函数的对象。


单独,以防万一有任何混乱:请注意,files[0]不会包含文件中的JSON。files[0]只是input type="file"中文件列表中该文件的记录。 load 其内容,您必须使用FileReader。这个答案(我的)显示了如何做到这一点。阅读它(可能使用readAsText)后,您将拥有JSON字符串(然后可以使用JSON.parse将其转换为对象结构)。

最新更新