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