使用Matlab读取JSON对象

Kev*_*vin 8 matlab json object

我想从一个带有Matlab的json文件中读取并将所有内容存储在"数据"中作为对象.导入后,我需要迭代所有并提取特定值,如果它在对象中可用.

JSON(来源):

{
    "eid": 44000, 
    "dpm_id": {
        "dpm": "fm", 
        "pwr": "main"
    }, 
    "fpga_id": 3189637128, 
    "fpga_ver": 3104379702, 
    "boot_id": 0, 
    "pbs_ver": "PBS 2012-05-07 16:41"
}
{
    "sid": 1, 
    "hk1": {
        "bela_mode": "pbs_mode", 
        "pbs_version": "version 1.3", 
        "scet": "2038-01-19T03:14:08", 
        "ref_time": "0:00:00", 
        "tc_received": 2, 
        "tc_exec": 2, 
        "tc_err_ack": 0, 
        "tc_err_exec": 1, 
        "tm_total": 1, 
        "tm_sent": 1, 
        "tm_dropped": 0,
        ....
Run Code Online (Sandbox Code Playgroud)

Matlab(导入,根据本网站,分类):

fname = 'FileName.json';
fid = fopen(fname);
raw = fread(fid,inf);
str = char(raw');
fclose(fid);

data = JSON.parse(str)
Run Code Online (Sandbox Code Playgroud)

问题/问题:

如您所见,Matlab只读取第一个括号/字段的内容.如何导入所有括号/字段,即使我不知道有多少括号/字段?

data = 

         eid: 44000
      dpm_id: [1x1 struct]
     fpga_id: 3.1896e+09
    fpga_ver: 3.1044e+09
     boot_id: 0
     pbs_ver: 'PBS 2012-05-07 16:41'
Run Code Online (Sandbox Code Playgroud)

谢谢!

Dan*_*iel 8

您正在尝试读取无效的json文件.我建议使用jsonlint进行快速验证.

你的json看起来像

{
    "skipped":"A"    
}
{
    "skipped":"B"
}
Run Code Online (Sandbox Code Playgroud)

这不是有效的语法,因为它描述了两个对象.在第一个}解析器期望文件结束之后,因为json文件包含一个对象.

可能的修复方法是:

[
    {
        "skipped": "A"
    },
    {
        "skipped": "B"
    }
]
Run Code Online (Sandbox Code Playgroud)

要么

{
    "aa": {
        "skipped": "A"
    },
    "bb": {
        "skipped": "B"
    }
}
Run Code Online (Sandbox Code Playgroud)


Ala*_*lan 3

您可以尝试使用另一个 json 库进行解析,例如文件交换上的这个库

或者,您可以尝试此站点上列出的一些方法,例如使用 matlab 的 Java 和 .NET 集成并加载其 json 库之一。

作为第三种选择,由于上面显示的方法将愉快地加载字符串中的第一个对象,因此您始终可以将字符串手动预解析为每个包含单个对象的字符串元胞数组,然后解析这些对象。