【问题标题】:Error converting string of object to JSON/js object将对象字符串转换为 JSON/js 对象时出错
【发布时间】:2016-01-11 05:13:18
【问题描述】:

我正在尝试将字符串转换为对象。我调查了一下,一切都说要么使用 JSON.parse 要么 eval。但是,当我尝试这些方法时,我的程序失败了,我检查了调试器,它说我的表达式无效:意外令牌 k 。谁能帮我吗?

router.post('/insertData', function (req, res) {
    var databaseName = req.body.DB , collection = req.body.collection, newData = req.body.data  ; 
    var test = JSON.parse(newData);
    var db = new Db(databaseName, new Server('localhost', 27017)); 
    db.open(function (err, db) {
        // Insert a document in the capped collection
        db.collection(collection).insert(test, { w: 1 }, function (err, result) {

【问题讨论】:

  • 该图像应该是什么?如果 "{key:value}" 是 newData 的实际值,那么它不会 JSON.parse 也不会 eval

标签: javascript json string object typeconverter


【解决方案1】:

JSON 是 JavaScript Object Notation 的缩写,是一种轻量级的、与语言无关的数据交换格式。为了在 JSON 字符串上使用 JSON.parse,该字符串必须是有效的 JSON。 "{key:value}" 不是有效的 JSON 字符串,因此解析器会抛出错误。

首先,在 JSON 中,对象是一组无序的名称/值对,其中名称是 字符串,值可以是 字符串数字对象数组truefalsenull

有趣的是 JSON 是如何定义字符串的:

字符串是零个或多个 Unicode 字符的序列,用双引号括起来

那么,您的字符串"{key:value}" 有什么问题?好吧,key 不是字符串,因此解析器在到达“k”时会立即抛出错误。此外,一旦我们修复了key,您会发现value 也没有任何意义。您需要在此处传递实际值(字符串、数字、对象、数组值或truefalsenull,如上所述)。

所以,相反,你会想要这样的东西:

var newData = '{"key":12345}';
var test = JSON.parse(newData);
console.log(test.key); // 12345

【讨论】:

  • 不,解析时出错。根本不会这样做
  • 我知道。我的回答说你需要给它“有效的 JSON”。我提供的 sn-p 有效,因此您需要确保您的 newData 是_valid JSON 字符串`,而您提供的值 ('{key:value}') 不是。但是,我提供的值是 ('{"key":12345}')。您需要修复您的 JSON 字符串以正确解析它。
  • 好吧,我必须将它作为字符串传递。 “{key:value}”,因为我通过路由传递它。那么如何将其解析为有效的 json 对象呢?
  • 哦,等等,我做了 {"key":12345} 并且成功了。好吧,我想我只需要添加一些客户端验证。谢谢
  • 有没有办法检查 JSON 解析是否失败?比如 if(json.parse() != true) 什么的?
猜你喜欢
  • 2016-02-02
  • 1970-01-01
  • 1970-01-01
  • 2012-05-08
  • 1970-01-01
  • 2022-11-28
  • 2020-12-19
  • 1970-01-01
相关资源
最近更新 更多