16

我今天发现了Javascript ES6 模板文字。就一个字:厉害!

问题:如何将模板文字存储和加载为 JSON?我通过 XHR 加载了一些文件,然后是一些JSON.parse()不支持`"文件,因此似乎无法将模板文字直接保存在文件中。

目标:将其用于动态字符串和翻译,并摆脱令人困惑的东西,例如("Hello " + username + "! How are you?")只需要为一条消息存储多个字符串,而是将我的东西保存得漂亮而简单

`Hello, ${username}! How are you?`

其中username指向同名的动态变量。那可能吗?如果是,如何实现这一目标?如果我必须使用函数以某种方式将字符串转换为模板文字,这没关系,只要它不会严重影响整体性能,但我至少想避免eval.

4

4 回答 4

10

您可以创建自己的函数来解析模板文字,

function stringTemplateParser(expression, valueObj) {
  const templateMatcher = /{{\s?([^{}\s]*)\s?}}/g;
  let text = expression.replace(templateMatcher, (substring, value, index) => {
    value = valueObj[value];
    return value;
  });
  return text
}

console.log(stringTemplateParser('my name is {{name}} and age is {{age}}', {name: 'Tom', age:100}));


// output 'my name is Tom and age is 100'

于 2019-07-07T07:00:22.543 回答
4

你总是可以JSON.stringify用来封闭动态数据:

const data = 'some value';
JSON.stringify({
  data,
});
// expected: "{\"data\": \"some value\"}"
于 2018-03-19T18:20:16.877 回答
1

我发现在 JSON 的几个子字符串中分离问题更容易。创建密钥“消息”,此密钥存储部分消息。它也适用于 i18n。

{
  "message" : {
    "_0": "first part ",
    "_1": "after first variable. ",
    "_2": "after another variable"
  }
}

然后,解码后,您可以像访问它一样访问它 ${message._0}${variable}${message._1}${var2}${message._2}

于 2020-08-11T22:30:38.213 回答
0

试试json-templates。看起来正是您正在寻找的东西。

于 2022-01-17T01:08:26.100 回答