访问嵌套 JSON 对象时出错
Error while accessing nested JSON object
这是我的 RethinkDB 中的示例行 table。
{
"a1": "val1" ,
"a2": "val2" ,
"a3": "val3" ,
"a4": "val4" ,
"part": [
{
"id": "reql" ,
"position": "student"
} ,
{
"id": "sdsadda" ,
"position": "officer"
}
] ,
"a5": "val5"
}
我想访问嵌套的 json 对象,但出现错误 e: 无法对非对象非序列执行括号 "string"
对于匹配 id 到 "reql" 的行,我需要输出中的整行
这是我的查询
r.db('dbname').table('tablename').filter(r.row('part').contains(function(product) {
return product('id').eq("reql");
}))
此查询以前有效。现在无效。
如果您以某种方式在 part
数组中得到一个字符串而不是对象的元素,就会出现该错误。试试 运行 .filter(r.row('part').contains(function(product) { return product.typeOf().ne('OBJECT'); })
,那应该 return 在 part
数组中有一个字符串的所有行。
关于您对@Puja 的评论,我认为这应该适合您:
r.db('dbname').table('tablename').filter(function(d){
d("part").typeOf().eq("ARRAY");
}).filter(r.row('part').contains(function(d) {
return d('id').eq("reql");
}))
不过,这比@mlucy 的回答效率低,你绝对应该通过修复 part: STRING
中的所有文档来清理你的数据集。
这是我的 RethinkDB 中的示例行 table。
{
"a1": "val1" ,
"a2": "val2" ,
"a3": "val3" ,
"a4": "val4" ,
"part": [
{
"id": "reql" ,
"position": "student"
} ,
{
"id": "sdsadda" ,
"position": "officer"
}
] ,
"a5": "val5"
}
我想访问嵌套的 json 对象,但出现错误 e: 无法对非对象非序列执行括号 "string"
对于匹配 id 到 "reql" 的行,我需要输出中的整行
这是我的查询
r.db('dbname').table('tablename').filter(r.row('part').contains(function(product) {
return product('id').eq("reql");
}))
此查询以前有效。现在无效。
如果您以某种方式在 part
数组中得到一个字符串而不是对象的元素,就会出现该错误。试试 运行 .filter(r.row('part').contains(function(product) { return product.typeOf().ne('OBJECT'); })
,那应该 return 在 part
数组中有一个字符串的所有行。
关于您对@Puja 的评论,我认为这应该适合您:
r.db('dbname').table('tablename').filter(function(d){
d("part").typeOf().eq("ARRAY");
}).filter(r.row('part').contains(function(d) {
return d('id').eq("reql");
}))
不过,这比@mlucy 的回答效率低,你绝对应该通过修复 part: STRING
中的所有文档来清理你的数据集。