[英]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.stringify
( spec , MDN )仅包含符合以下所有条件的属性:
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.