首页 > 解决方案 > 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 之外处理,我不知道这样做的最佳做法是什么。

标签: javascriptnode.jsjson

解决方案


这是一个完整的演示,只是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_Englishname_en.


推荐阅读