Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JSON对象被视为字符串_Javascript_Json - Fatal编程技术网

Javascript JSON对象被视为字符串

Javascript JSON对象被视为字符串,javascript,json,Javascript,Json,我有一个ajax调用,返回以下JSON: returnedData = "[ { id: 1, firstName: 'John', lastName: 'Smith', address: '123 Spa Road', city: 'London', orders: [ { product: 'TV', price: 599.99, quantity: 2, orderTotal: 1199.98 } ]

我有一个ajax调用,返回以下JSON:

returnedData = "[ 
    { id: 1, firstName: 'John', lastName: 'Smith', address: '123 Spa Road', city: 'London', 
        orders: 
        [ 
            { product: 'TV', price: 599.99, quantity: 2, orderTotal: 1199.98 } 
        ]
    }
]";

var customers = JSON.parse (returnedData);
console.log(customers.length); // prints length of the string data
它将其视为字符串。但是,我可以直接指定结果

var customers = [ 
    { id: 1, firstName: 'John', lastName: 'Smith', address: '123 Spa Road', city: 'London', 
        orders: 
        [ 
            { product: 'TV', price: 599.99, quantity: 2, orderTotal: 1199.98 } 
        ]
    }
];

console.log(customers.length); // prints 1 - the number of objects
为什么是这样?如何动态分配它?

运行代码,您将发现代码中有错误

将对象文字粘贴到您将看到的验证器中

Parse error on line 2:
[    {        id: 1,        first
--------------^
Expecting 'STRING', '}'

在名称和字符串值周围需要有双引号

必须用双引号将属性括起来:

var returnedData = '[{ "id": 1, "firstName": "John"}]';

returnedData
不是有效的JSON消息(属性没有用双引号括起来),但您可以将其视为JS消息

var customers = eval(returnedData);

如果要使用
JSON.parse
,请更正
returnedData

接收的字符串不是有效的JSON对象。小心不要混淆JSON和JavaScript。看看这个例子:

var returnedData = '[ { "id": 1, "firstName": "John", "lastName": "Smith", "address": "123 Spa Road", "city": "London", "orders": [ { "product": "TV", "price": 599.99, "quantity": 2, "orderTotal": 1199.98 } ] } ]';

var customers = JSON.parse (returnedData);
console.log(customers.length); // the correct length now.

请注意,唯一的区别是我将字典中的键放在“'s”内。

您的字符串有问题

这是格式良好的json

var returnedData ='[
    {
        "id": 1,
        "firstName": "John",
        "lastName": "Smith",
        "address": "123SpaRoad",
        "city": "London",
        "orders": [
            {
                "product": "TV",
                "price": 599.99,
                "quantity": 2,
                "orderTotal": 1199.98
            }
        ]
    }
]';

单引号必须转义或不使用它们…您可以在打开和关闭字符串时使用它们,这样它比其他posibilitys格式更好(由于@Victor Canova的有用注释而被更正)

不确定
的意思是将长度打印为字符串
按照编写代码的方式,它只会返回错误。”未捕获的语法错误:意外标记非法“这不是有效的JSON。它是有效的Javascript文本,但不是JSON。代码甚至不是有效的Javascript,因为JS中不能有多行字符串。
[{“id”:1,“firstName”:“John”,“lastName”:“Smith”,“address”:“123 Spa Road”,“city”:“London”,“orders”:[{“product”:“TV”,“price”:599.99,”quantity“:2,“orderTotal“:1199.98}]}]
是有效的JSON数据。谢谢。这就是我缺少的。你可以在这里检查你的JSON代码:只是好奇,“不允许单引号”你的意思是,如果在JSON中使用,它们必须被替换,对吗?