javascript/nodejs-如何通过语言操作Json对象



我使用nodejs作为服务器

目前,我的项目文件夹中有一个Json。

name.json

{
"name_English": "Apple",
"name_German": "Apfel",
"name_French": "Pomme"
}

当我向服务器发送请求时,它返回:

GET http://localhost:3030/name

{
"name_English": "Apple",
"name_German": "Apfel",
"name_French": "Pomme"
}

但我发现这对前端开发并不方便。

有什么方法可以做下面这样的事情吗?

GET http://localhost:3030/name?lang=en

{
"name": "Apple"
}

GET http://localhost:3030/name?lang=fr

{
"name": "Apfel"
}

编辑1
在Feathers.js 中获取Json的代码

name.class.js

const nameLists = require('../name.json')
exports.Test = class Test {
constructor (options) {
this.options = options || {};
}
async find (params) {
return nameLists
}
};

编辑2

有可能把name.json做成这样吗?

{
"name": ${name}
}

编辑3
我之所以要实现上述目标,是因为我必须返回整个Json文件。对于国际化库,它似乎需要在JSON之外进行处理,我不知道这样做的最佳实践是什么

这里有一个完整的演示,只有express。(希望没关系。(

const express = require('express');
const app = express();
const port = 3030;
const nameLists = require('./name.json');
const unabbreviateLanguage = {
en: 'English',
de: 'German',
fr: 'French'
}
function filterByLanguage(obj, abbr) {
let language = unabbreviateLanguage[abbr];
let suffix = '_' + language;
let result = {};
for (let key in obj) {
if (key.endsWith(suffix)) {
let newkey = key.slice(0, -suffix.length);
result[newkey] = obj[key];
}
}
return result;
}
app.get('/name', (req, res) => {
res.json(filterByLanguage(nameLists, req.query.lang));
});
app.listen(port);

例如:

curl http://localhost:3030/name?lang=de

输出:

{"name":"Apfel"}

这个想法是迭代输入对象的键,并准备一个只有与语言后缀匹配的键的输出对象(然后去掉后缀(。您可能想要en->English,或者只使用与参数匹配的密钥名称,例如,将name_English重命名为name_en

在FeathersJS中,findparams对象将存储传入URL的查询字符串。因此,如果您调用http://localhost:3030/name?lang=enparams对象将是:-

{
query: {
lang: 'en'
}
}

然后,您可以使用这些信息来确定从JSON返回哪个结果。

https://docs.feathersjs.com/guides/basics/services.html#service-方法

您的问题分为两部分:处理查询和处理国际化。

处理查询:

Features在以下位置通过上下文对象显示查询:

context.params.query

处理国际化:

有许多坚实的包可用于处理国际化:

https://openbase.com/categories/js/best-nodejs-internationalization-libraries?orderBy=RECOMMENDED&

最新更新