json - 字符串化对象时如何从对象中删除引号和反斜杠(不使用正则表达式)

标签 json node.js regex neo4j

我正在使用 Neo4j,它有一个子句允许一次设置多个属性:

 MATCH (p:Person)
 WHERE p.email = '${userEmail}'
 SET p += ${argsToUpdate}
 RETURN p AS Person

但是,我无法将 argsToUpdate 放入查询中,因为 Neo4j 正在查找与此处显示的字符串完全相同的字符串:

 { email: 'test@test.com', age: 1337, colour: 'blue' }

我可以使用 JSON.stringify(argsToUpdate) 正则表达式并去掉\和 "但这不太好,因为某些属性可能包含这些字符。也许可以先对它们进行编码。

我还尝试了JSON.parse(JSON.stringify(argsToUpdate))

我使用了 util.inspect(argsToUpdate) 并且它工作得很好,但我的开发负责人不会接受它,因为它是一个 Node.js 调试方法。

是否有一种简单的方法可以通过另一种方式实现这一目标?

我不想做像这样的 for 循环之类的事情:

 let args = '{ '
 for (let i = 0; i < Object.keys(argsToUpdate).length; i++) {
     args += `${prop[i]}: ${key[i]}`
 }
 args += ' }'

有没有有效的方法来做到这一点?问题在于 argsToUpdate 包含的属性数量可变。我希望它是动态的,这样代码就不会那么脆弱。 ES6+ 中是否有任何可用的东西(包括 babel)可以实现 util.inspect(argsToUpdate) 的结果?

最佳答案

假设您使用默认的 neo4j 驱动程序,您应该能够以标准 javascript 数据结构将所有参数传递给查询,而不必担心像这样的字符串转义。我认为问题在于您的参数命名不正确。

Cypher 参数必须由 unicode 字母组成,并且不能以货币符号开头。用反引号括起来的名称可以包含空格。因此,应采用如下形式。

  • {someParam}
  • $someParam

或者甚至是像下面两个这样的东西。

{ `some param with spaces in the name` }
$`some param with spaces in the name`

考虑到这一点,下面的查询应该可以工作。

session
  .run('MATCH (p:Person) WHERE p.email = $userEmail SET p += $argsToUpdate RETURN p AS Person', {userEmail: 'test@test.com', argsToUpdate: { email: 'test@test.com', age: 1337, colour: 'blue' }})

关于json - 字符串化对象时如何从对象中删除引号和反斜杠(不使用正则表达式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45801770/

相关文章:

json - jq:如何并排获取 2 个一维数组作为输出

node.js - GraphQL 发送了正确的数据,但变量未定义

node.js - 如何从 Node.js 中执行外部程序?

node.js - 尝试查询 dynamodb 时,Lambda 函数返回 401 错误

regex - 在 Linux 文件名中替换双引号以及其他无效的 Windows 文件名字符

python - 如何使用 ^ 和 $ 来解析简单的表达式?

json - Odoo : Export res. 公司反对 JSON

Javascript - 无法确定 JSON 对象是否包含 true

php - 如何在blueimp文件 uploader 中传递值?

php - 正则表达式 : Split English and Non-English words with Comma?