Javascript:如何将模板文本与JSON一起使用?

Javascript:如何将模板文本与JSON一起使用?,javascript,json,template-literals,Javascript,Json,Template Literals,我今天发现了。只要一个字:太棒了 问题:如何将模板文本存储和加载为JSON?我通过XHR加载了一些文件,后面是一些JSON.parse(),它不支持`而不是“,因此似乎无法将模板文本直接保存在文件中 目标:将其用于动态字符串和翻译,并消除诸如(“你好”+username+“!你好吗?”)等令人困惑的内容,它要求只为一条消息存储多个字符串,而不是将我的内容漂亮而简单地保存为 `Hello, ${username}! How are you?` 其中,username指向具有相同名称的动态变量。这

我今天发现了。只要一个字:太棒了

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

目标:将其用于动态字符串和翻译,并消除诸如
(“你好”+username+“!你好吗?”)
等令人困惑的内容,它要求只为一条消息存储多个字符串,而不是将我的内容漂亮而简单地保存为

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

其中,username指向具有相同名称的动态变量。这可能吗?如果可能,如何实现?如果我必须使用函数将字符串转换为模板文本,只要不会严重影响整体性能,这是可以的,但我希望至少避免
eval
您应该始终使用
JSON.stringify
来封装动态数据:

const data = 'some value';
JSON.stringify({
  data,
});
// expected: "{\"data\": \"some value\"}"

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

函数stringTemplateParser(表达式,valueObj){
const templateMatcher=/{\s?([^{}\s]*)\s?}/g;
让text=expression.replace(templateMatcher,(子字符串、值、索引)=>{
value=valueObj[value];
返回值;
});
返回文本
}
log(stringTemplateParser('我的名字是{{name}},年龄是{{age}}',{name:'Tom',年龄:100}));

//输出'my name is Tom and age is 100'
我发现在JSON的几个子字符串中分离问题更容易。创建键“message”,该键存储消息的部分。它也适用于i18n

{
  "message" : {
    "_0": "first part ",
    "_1": "after first variable. ",
    "_2": "after another variable"
  }
}
然后,在解码之后,你可以像
${message.\u 0}${variable}${message.\u 1}${var2}${message.\u 2}

这些文字是代码而不是字符串。您不能将它们存储为JSON。但您可以使用函数。
var tplHello=({username})=>`你好,${username}!你好吗?`
并将其用作
var data={username:“foo”},text=tplHello
@Thomas:谢谢。就像你说的那样,我似乎把模板文字和“动态字符串”混淆了。根据我的说法,将字符串转换为模板文字与eval隐式相同,因为变量查找总是需要执行代码。似乎我希望有一个简单的翻译系统或“动态”字符串被一种误解所助长。离题:我想使用RegEx替换字符串中的%username(或类似的名称)会更适合我想要实现的目标。