使用NodeJS更新JSON对象中的值

时间:2017-07-21 19:47:04

标签: javascript json node.js

我有一个JSON对象正在提交给AWS Lambda NodeJS函数。这个JSON对象在我将其插入MySQL数据库之前需要转义的其中一个字段中有一个撇号。

对象需要保持完整,因为它在数据库中存储为JSON对象。我已经查看了字符串替换函数,但这些函数不起作用,因为这本身就是一个JSON对象。

我确信这里有一个简单的答案,我只是对NodeJS很新,并且在搜索了几个小时之后找不到方法。提前谢谢!

我需要更新的字段是2.1:

BAD JSON对象的示例:

{
  "field1": "ABCD1234DEFG4567",
  "field2": "FBI",
  "fieldgroup": {
    "1.1": "ABCD",
    "1.2": 20170721,
    "1.3": "ABCD",
    "2.1": "L'astName, FirstName M"
  }
}

FINAL JSON对象的示例:

{
  "field1": "ABCD1234DEFG4567",
  "field2": "FBI",
  "fieldgroup": {
    "1.1": "ABCD",
    "1.2": 20170721,
    "1.3": "ABCD",
    "2.1": "L''astName, FirstName M"
  }
}

2 个答案:

答案 0 :(得分:2)

const o = {
    "field1": "ABCD1234DEFG4567",
    "field2": "FBI",
    "fieldgroup": {
        "1.1": "ABCD",
        "1.2": 20170721,
        "1.3": "ABCD",
        "2.1": "L'astName, FirstName M"
      }      
   };
   
const preparedObject = prepare(o);
console.log(JSON.stringify(preparedObject, null, 4));

function prepare(o) {
  const replacedStrings = Object.keys(o)
    .filter(key => typeof o[key] === "string")
    .reduce((accu, key) => ({ ...accu, [key]: o[key].replace("'", "''") }), {});
  const preparedChildren = Object.keys(o)
    .filter(key => typeof o[key] === "object")
    .reduce((accu, key) => ({ ...accu, [key]: prepare(o[key]) }), {});
  return { ...o, ...replacedStrings, ...preparedChildren };
}

答案 1 :(得分:2)

如果您将值作为JSON获取,请在JSON上执行字符串替换并作为Object返回,这应该可以。

let escapeSingleQuotes = json => {
  return JSON.parse(json.replace(/'/, "''"))
}

如果你想从JS对象中删除单引号,它与上面相同但是,首先转换为字符串然后返回到对象

let escapeSingleQuotes = obj => {
  return JSON.parse(JSON.stringify(obj).replace(/'/, "''"))
}