【问题标题】:Create JSON from Matlab从 Matlab 创建 JSON
【发布时间】:2015-04-13 18:31:08
【问题描述】:

我有一个包含一堆变量的工作区,我想使用 JSONlab 将其转换为 JSON 文档。到目前为止,我的代码如下所示:

loadjason = {'{"Duration":Duration,"Num_Samples":nsamples,"Frequency":Freq,"Num_Channels":nchannels1}')

不在双引号中的项目(即 Freq)是我的 MATLAB 工作区中的变量,但我的输出是:

Error using loadjson>error_pos (line 482)
JSONparser:invalidFormat: Value expected at position 13:
{"Duration":<error>Duration,"Num_Samples

Error in loadjson>parse_value (line 471)
   error_pos('Value expected at position %d');

Error in loadjson>parse_object (line 206)
   val = parse_value(varargin{:});

Error in loadjson (line 96)
   data{jsoncount} = parse_object(opt);`

如何将变量传递给 loadjson,以便将它们作为值而不是文字来读取?

【问题讨论】:

    标签: json matlab variables


    【解决方案1】:
    loadjason = {'{"Duration":Duration,"Num_Samples":nsamples,"Frequency":Freq,"Num_Channels":nchannels1}')
    

    不是有效的 JSON。字符串值,例如 Duration,如果是字符串(例如,'"Duration":"5 seconds"'),则需要用引号引起来。数值不需要引号。例如,'"Duration":5' 是有效的。此外,您最外面的括号不匹配,并且您不需要 { } 将整个字符串括起来两次。修改您的 MATLAB 代码以生成类似的内容,

    loadjason = '{"Duration":5,"Num_Samples":1,"Frequency":1,"Num_Channels":1}'
    

    获取 int 值:

    loadjason = '{"Duration":'
    temp = int2str(Duration)
    loadjason = strcat(loadjason,temp)
    
    loadjason = '{"Num_Samples":'
    temp = int2str(nsamples)
    loadjason = strcat(loadjason,temp)
    
    loadjason += ',{"Frequency":'
    temp = int2str(freq)
    loadjason = strcat(loadjason,temp)
    
    loadjason += ',{"Num_Channels":'
    temp = int2str(nchannels1)
    loadjason = strcat(loadjason,temp)
    
    loadjason += '}'
    

    并继续其余的变量。或者,您可以创建一个为您执行此操作的函数。

    【讨论】:

    • 有没有办法传递变量的值?我的 MATLAB 变量“持续时间”是 int,但如果我写“持续时间”,它不会将其解释为字符串“持续时间”,而不是名为“持续时间”的变量的值吗?
    • 您可以使用int2str将整数的值转换为字符串。我会将其添加到我的解决方案中。
    • 谢谢,这行得通。附带问题:您知道将双精度数转换为字符串的好方法吗?变量 Duration 是一个值为 1.6420e+04 的双精度数。我试过sprintf('%f',Duration) 和num2str,但他们都没有给出“1.6420e+04”的预期答案。我需要一种很好的方法来进行转换或将其转换为更易读的浮点数。
    • 查看此链接 mathworks.com/help/matlab/ref/num2str.html 我相信您可以使用它来获得所需的任何精度。确保将所需精度作为正整数传递。
    猜你喜欢
    • 2012-11-28
    • 2014-07-27
    • 1970-01-01
    • 2019-11-02
    • 2011-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多