【发布时间】:2013-12-30 14:32:09
【问题描述】:
我发现在编写 Node.js 应用程序时无法在 Cypher 查询中使用标准 JSON 字符串:
var neo4j = require('neo4j')
,db = new neo4j.GraphDatabase('http://localhost:7474')
,enc_datum = JSON.stringify({id: 1, data: 'foo'})
,qstr = ['MATCH (n %DATUM)'
,'RETURN n'
].join('\n')
.replace('%DATUM', enc_datum)
db.query(qstr)
它会抱怨 '"' 字符,因为 Cypher 接受这样的编码对象:
MATCH (n {id: 1, data: 'foo'})
RETURN n
不是用 JSON 编码的:
var enc_datum = JSON.stringify({id: 1, data: 'foo'})
console.log(enc_datum)
// would be {"id":1,"data":"foo"}
错误消息显示,由于 " 字符,Cypher 或 Neo4j 模块不接受标准 JSON。它会抱怨{ 之后的下一个字符应该是identifier 或其他字符。
所以我陷入了困境:要么我必须在 JSON 字符串嵌入查询字符串之前使用一些讨厌的 RegExpr 来处理它,要么我必须发明一种方法来为微小的 " 字符编码对象。在我进入这两种棘手的方法之前,我只想问一下是否有一些更合适的解决方案......
(我现在在测试中通过使用eval 而不是 JSON 来评估我的编码数据来解决这个问题,而字符串将直接用于 Cypher 查询中,因此我不能使用 JSON 对其进行字符串化。但我可以' t 以这种方式处理客户端编码的 JSON)
【问题讨论】:
-
我现在使用这个作为快速修复:
enc_datum.replace(/":/g,':').replace(/{"/g,'{').replace(/,"/g,','),我仍然想知道是否有更好的解决方案。
标签: javascript json node.js neo4j