JSON 解析错误“类型错误:未定义不是对象”“[对象对象]

问题描述

我一直在尝试 JSONParse 这个 rest api,但没有任何运气。有人能明白为什么我总是收到 [object Object] 或未定义的错误吗?

    <div id="store_1_name"></div> 
    <div id="owner_1_name"></div>
    <div id="friend_1_name"></div>

var raw_data_string = '{"2":[{"buy":[{"house":"loan","condo":{"USD":64311.9005450},"apartment":{}},{"house":"rent","condo":{"USD":2015.38570},"apartment":{}}]}';

var data = JSON.parse(raw_data_string);

for (var i in data) {
  ParseUpdate(data[i].house,data[i].condo,data[i].apartment);
}

function ParseUpdate(house,condo,aparment) {


  var house = data[i].house;
  var condo = data[i].condo;
  var apartment = data[i].buy.apartment;
}


document.getElementById("store_1_name").innerHTML = data[0].house;
document.getElementById("owner_1_name").innerHTML = data[0].condo;
document.getElementById("friend_1_name").innerHTML = data[0].apartment;

谢谢大家!

解决方法

  1. 您的 json 字符串无效
  2. 检查您的 data 结构并再次更正循环 (for)
  3. apartment 是一个对象,但你显示它是相同的 string document.getElementById("friend_1_name").innerHTML = data[0].apartment; 不起作用
,
var raw_data_string =
  '{"2":[{"buy":[{"house":"loan","condo":{"USD":64311.9005450},"apartment":{}},{"house":"rent","condo":{"USD":2015.38570},"apartment":{}}]}]}';

var data = JSON.parse(raw_data_string);

console.log(data);

raw_data_string 中缺少一些右括号。我建议JSON Formatter & Validator

,

你在这里做错了很多事情。第一,JSON 字符串无效。第二,您试图访问 for 循环内的错误元素。第三,如果您还在同一个循环中访问 data[i].buy.apartment,那么 data[i].house 不存在,因为它们位于 buy 的同一个对象中。第四,您试图在 div 的 innerHTML 中显示 JSON 对象,您应该在其中访问要显示的字符串值或 stringify 整个对象。

var raw_data_string = '{"2":[{"buy":[{"house":"loan","apartment":{}}]}]}';

var data = JSON.parse(raw_data_string)[2][0]['buy'];
for (var i in data) {
  ParseUpdate(data[i].house,data[i].condo,data[i].apartment);
}

function ParseUpdate(house,condo,aparment) {
  var house = data[i].house;
  var condo = data[i].condo;
  var apartment = data[i].apartment;
}

document.getElementById("store_1_name").innerHTML = data[0].house;
document.getElementById("owner_1_name").innerHTML = JSON.stringify(data[0].condo);
document.getElementById("friend_1_name").innerHTML = JSON.stringify(data[0].apartment);
<div id="store_1_name"></div> 
    <div id="owner_1_name"></div>
    <div id="friend_1_name"></div>