javascript - javascript/nodejs - 如何通过语言操作 Json 对象
问题描述
我正在使用 nodejs 作为服务器。
目前我的项目文件夹中有一个 Json。
名称.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 的代码
名称.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
.
推荐阅读
- hl7-fhir - 如何安排个别 MedicationRequest 管理?
- postgresql - 使用函数更新 PostgreSQL 表中的数组
- javascript - 局部坐标系与经纬度的逆
- python - How do you view the active Conda environment in VSCode?
- ios - Swift 中是否有一些东西可以解码 html 或者我应该坚持使用依赖项?
- html - Xhtml 验证器错误“非保留名称”
- android - kundli 应用程序的自定义用户界面
- php - 使用 PHP 从保存在本地的 GeoIP 数据库中获取数据
- ios - 应用程序在 UIActivityViewController 上呈现时崩溃
- apache-tika - Apache Tika:在 tika-server 上为 opennlp 模型设置类路径