首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在JavaScript & JSON中,为什么str =JSON.stringify(Obj)的结果等于{}?

在JavaScript & JSON中,为什么str =JSON.stringify(Obj)的结果等于{}?
EN

Stack Overflow用户
提问于 2017-03-02 08:32:06
回答 1查看 553关注 0票数 1

我是一个最近自学的JavaScript & JSON启动者。这个半项目是我的第二个JavaScript项目的一部分。请对我温柔点。

我试图输入一个JSON文件,对它进行字符串化,并输出结果字符串。该文件是一个JavaScript对象。但是,当我执行语句str = JSON.stringify(obj);时,我得到的结果是str === {}

为什么字符串化的文件对象等于{}?如何使它成为一个字符串,等于字符串化的JSON文件?

JavaScript是:

代码语言: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是:

代码语言:javascript
复制
<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的相关输出是:

代码语言:javascript
复制
obj: [object File]

object stringified : {}

JSON文件由BBEdit for Mac组成,保存为Unicode (UTF-8)文件,如下所示:

代码语言:javascript
复制
{
"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格式化程序)验证了它。我还是得到了同样的结果。(我还插入了新的第一段。)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-02 08:37:39

JSON.stringify (等级库MDN)仅包括符合以下条件的all的属性:

  • 它们是自己的属性(不是对象从原型继承的属性)。
  • 它们是可枚举的属性(例如,出现在for-in循环中的那种)
  • 它们的名字是字符串(不是符号)。
  • 它们的值不是undefined或函数。

您要转换为JSON的对象似乎只具有继承或不可枚举的属性,以及/或其值为undefined或函数的属性。

不过,另外,为了防止出现任何混淆:请注意,files[0]将不包含文件中加载的JSON。files[0]只是input type="file"中文件列表中该文件的记录。要加载其内容,必须使用FileReader这个答案展示了如何做到这一点。一旦读取了它(可能使用了readAsText),就会有JSON字符串(然后可以使用JSON.parse将其转换为对象结构)。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42550344

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档