【问题标题】:Is there a way to convert this json file? [closed]有没有办法转换这个json文件? [关闭]
【发布时间】:2018-08-18 14:07:18
【问题描述】:

我有这个 json 文件:

{
  "spain" : "spanish.",
  "usa" : "english",
  "france" : "french",
  "italy" : "italian",
  ...
}

有没有一种快速的方法来转换下面这个 json 文件?

[ 
 { "country": "spain", "language": "spanish." }
 { "country": "usa", "language": "english." }
 { "country": "france", "language": "french." }
 { "country": "italy", "language": "italian." }
  ...
}

【问题讨论】:

  • 使用哪种语言? Python 还是 JS?
  • 是的,有办法。你试过什么,你在哪里卡住了?忘记 JSON 部分,假装你的源代码中有一个硬编码的字典,你想生成字典列表并打印出来。你能做到吗? (那么只需在开头添加一个json.loads,在末尾添加一个json.dumps,或者JS中等效的JSON方法。)
  • @Teemu 我更喜欢 javascript,但 python 也不错 ;)
  • 困难的部分是什么?从文件中获取 JSON?将其转换为对象?重构对象?还有什么?
  • 困难的部分是将这个“西班牙”:“西班牙”,转换成这个{“国家”:“西班牙”,“语言”:“西班牙”。 }

标签: javascript python json


【解决方案1】:
In[2]: import json
  ...: 
  ...: result = []
  ...: with open('hmm.json', 'r') as f:
  ...:     json_dict = json.load(f)
  ...:     for country, language in json_dict.items():
  ...:         result.append({
  ...:             'country': country,
  ...:             'language': language
  ...:         })
  ...: 
In[3]: result
Out[3]: 
[{'country': 'spain', 'language': 'spanish.'},
 {'country': 'usa', 'language': 'english'},
 {'country': 'france', 'language': 'french'},
 {'country': 'italy', 'language': 'italian'}]

【讨论】:

    【解决方案2】:

    暂时忘记 JSON 部分。这里最困难的部分是将这些 'spain': 'spanish' 键值对中的每一个转换为单独的字典,对吧?

    首先,考虑一下:

    for country, language in d.items():
    

    这为您提供了一个循环,每次通过循环时,您都会获得其中一个键值对,例如 country = 'spain'language = 'spanish'。因此,您所要做的就是创建所需格式的字典,并将其附加到某些结果中。

    将硬编码的 dict 转换为源代码并在最后打印出列表。

    完成并调试后,只需使用json.loads 代替硬编码的字典,使用json.dumps 代替print。或者,如果您希望它加载和保存文件而不是将标准输入过滤到标准输出,请open 文件名,然后在结果文件上使用json.loadjson.dump

    如果您在这些部分中遇到任何问题,您将在 StackOverflow 上提出一个很好的具体问题。

    【讨论】:

      【解决方案3】:

      在带有列表理解的 Python 中:

      import json
      with open("test.json", 'r') as f:
          test = json.load(f)
      json.dumps([{"country": key, "language": test[key]} for key in test.keys()])
      

      【讨论】:

        【解决方案4】:

        JS:遍历输入对象的键,将每个键分配给输出对象的国家字段,并将对应的值分配给其语言字段。

        var input = {"spain":"spanish"};
        var output = [];
        Object.keys(input).forEach((key, ind) => 
            { 
                output.push({country: key, language:input[key]}); 
            });
        console.log(output);

        【讨论】:

          【解决方案5】:

          Javascript

          使用函数map

          var countries = { "spain" : "spanish", "usa" : "english", "france" : "french", "italy" : "italian"  }
              result = Object.entries(countries).map(([c, l]) => ({country: c, language: l}));
              
          console.log(result);
          .as-console-wrapper { max-height: 100% !important; top: 0; }

          【讨论】:

            【解决方案6】:

            试试这个:

            var arr = [];
            var keys = Object.keys(myobj);
            for(var i in keys){
                var key = keys[i];
                if(key){
                    arr.push({"country":key,"language":myobj[key]});
                }
            }
            

            【讨论】:

              猜你喜欢
              • 2016-07-08
              • 2020-12-17
              • 2020-09-18
              • 2017-07-15
              • 2021-07-27
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多