json可以用空字符作为""key的?

今天,在查BUG时,发现有一段JSON,里面的key 是 "" 空字符啊,导致插入我mongodb时,报错zero-length keys are not allowed, did you use $ with double quotes。

就郁闷了,json 可以这样的吗?如下:

{
  "": 12221,
  "key1": "valus"
}

有什么办法可以检查到这样的JSON数据,?或PHP对JSON字符串encode,decode时能够发现这样的错。

阅读 7.6k
6 个回答

写了个方法,你可以通过下面方式判断JSON数据是否含有空key。

function isKeyBlank(json) {
        var obj=JSON.parse(json);
        return Object.keys(obj).includes("")
    }
    var json='{"":"1","b":"2"}';
    
    isKeyBlank(json)  //true

可以的
var obj = {"": 123,b:2}
var s = JSON.stringify(obj)
console.log(s)
"{"":123,"b":2}"

如果你的对象深度只有一层,那这样:

var a = {
  '': 12221,
  'key': 'value'
}
Object.keys(a).filter(x => {if (x === '') delete a[x]})

如果你的对象深度有多层,那这样:

var a = {
  '': 12221,
  'key': {
    '': 121,
    'key': 'value'
  }
}
function foo (obj) {
  Object.keys(obj).filter(x => {
    if (x === '') delete obj[x]
    else if (obj[x] !== null && typeof obj[x] === 'object') foo(obj[x])
  })
}
foo(a)

我认为这种写法是不可以的,即时语法层面支持,也不建议使用。 应该解决 为何会出现空key的问题

多谢各位大神,

不可以,我接触的js和php都不行,其它语言不知道。可以想下,如果key用'',怎么获取呢?一个键可以'',万一又有一个key也是''呢=,不就矛盾了吗?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进