【问题标题】:How to convert a multi-dimensional dictionary to json file?如何将多维字典转换为 json 文件?
【发布时间】:2021-02-26 20:09:50
【问题描述】:

我已使用以下方法将包含“结构”的 *.mat 文件上传到我的 jupyter 实验室:

from pymatreader import read_mat
data = read_mat(mat_file)

现在我有一个多维字典,例如:

data['Forces']['Ss1']['flap'].keys()

给出输出:

dict_keys(['lf', 'rf', 'lh', 'rh'])

我想完全通过已经存在的键将其转换为 JSON 文件,而无需手动执行此操作,因为我想对具有各种键号的许多 *.mat 文件执行它。

编辑: 不幸的是,我不再可以访问 MATLAB。 所需输出的示例如下所示:

json_format = {
"Forces": {
  "Ss1": {
    "flap": {
      "lf": [1,2,3,4],
      "rf": [4,5,6,7],
      "lh": [23 ,5,6,654,4],
      "rh": [4 ,34 ,35, 56, 66]
        }
      }
    }
  }

另一个编辑: 所以在列出了子键之后(我不会详细说明),我这样做了:

FORCES = []
for ind in individuals:
  for force in forces:
    for wing in wings:
      FORCES.append({
          ind: {
              force: {
                  wing: data['Forces'][ind][force][wing].tolist()
 
              }
          }
      })

然后,保存:

with open(f'{ROOT_PATH}/Forces.json', 'w') as f:
    json.dump(FORCES, f)

这行得通,但只是因为我手动查找了所有键...此外,出于某种原因,我在此 json 文件的开头和结尾都有方括号。

【问题讨论】:

  • 你能添加一个你期望的 json 文件的例子吗?

标签: json python-3.x matlab dictionary


【解决方案1】:

json 包会将字典输出为 JSON:

import json

with open('filename.json', 'w') as f:
    json.dump(data, f)

【讨论】:

  • 我得到一个 TypeError:字节类型的对象不是 JSON 可序列化的
  • Now TypeError: Object of type ndarray is not JSON serializable...我开始认为它是可撤销的
  • 这些错误是因为除了数值之外,您还有字节或 Numpy 数组必须在序列化为 JSON 之前进行转换。例如:stackoverflow.com/questions/26646362/…
【解决方案2】:

如果您使用的是 MATLAB-R2016b 或更高版本,并且想直接从 MATLAB 转到 JSON,请查看 JSONENCODEJSONDECODE。为了您的目的JSONENCODE

对数据进行编码并返回 JSON 格式的字符向量。 MathWorks Docs

这是一个简单示例,假设您的数据位于 MATLAB 变量 test_data 中,并将其写入变量 json_file 中指定的文件中

json_data = jsonencode(test_data);
writematrix(json_data,json_file);

注意:由于 JSON 规范的限制,某些 MATLAB 数据格式无法转换为 JSON 数据。但是,听起来您的数据很符合 JSON 规范。

【讨论】:

    猜你喜欢
    • 2018-12-08
    • 2016-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-15
    • 2019-10-05
    • 1970-01-01
    相关资源
    最近更新 更多