簡體   English   中英

在JavaScript和JSON中,為什么是str = JSON.stringify(obj);的結果? 等於 {}?

[英]In JavaScript & JSON, why is the result of str = JSON.stringify(obj); equal to {}?

我是最近開始自學的JavaScript和JSON初始化程序。 這個demi項目是我的第二個JavaScript項目的一部分。 請對我好一點。

我試圖輸入一個JSON文件,對其進行字符串化,然后輸出結果字符串。 該文件是一個JavaScript對象。 但是當我執行語句str = JSON.stringify(obj); 我得到的結果是str === {}

為什么字符串化的文件對象等於{}? 如何獲取等於已字符串化的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 : {}

由BBEdit for Mac組成並保存為Unicode(UTF-8)文件的JSON文件為:

{
"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格式器 )對其進行了驗證。 我仍然得到相同的結果。 (我也插入了新的第一段。)

JSON.stringifyspecMDN )僅包含符合以下所有條件的屬性:

  • 它們是自己的屬性(不是對象從其原型繼承屬性)
  • 它們是可枚舉的屬性(例如,在for-in循環中顯示的屬性)
  • 它們的名稱是字符串(不是符號)
  • 它們的值不是undefined或函數

您嘗試轉換為JSON的對象似乎僅具有繼承或不可枚舉的屬性,和/或具有undefined值或函數的屬性。


不過,以防萬一,請單獨注意: files[0]不會包含從文件中加載的JSON。 files[0]只是input type="file"中文件列表中該文件的記錄。 加載其內容,您必須使用FileReader 這個(我的)答案顯示了如何做到這一點。 讀取它之后(可能使用readAsText ),您將擁有JSON字符串(然后可以使用JSON.parse將其轉換為對象結構)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM