Octave:jsondecode将单元素数组视为非数组,如何让jsonencode输出数组形式?
Octave中保留单元素JSON数组的方法
Octave的jsondecode会将JSON中的单元素数组解析为非数组类型,比如执行以下两段代码:
j1 = jsondecode ('{"foo": [42]}')
j2 = jsondecode ('{"foo": 42}')
用jsonencode对解析后的结果重新编码时,输出完全一致:
ans = {"foo":42}
如果需要让编码结果保留数组形式,输出如下内容:
ans = {"foo":[42]}
解决方法
核心是确保在编码前,目标字段为数组类型而非单个标量值,可通过以下方式实现:
手动转换字段类型
解析后主动将目标字段包装为数组:j1 = jsondecode ('{"foo": [42]}'); j1.foo = [j1.foo]; # 将标量转为单元素数组 jsonencode(j1)执行后即可得到带数组格式的JSON输出。
批量处理辅助函数
如果需要处理多个字段或批量数据,可以编写辅助函数,自动将结构体中的标量字段转为单元素数组:function obj = ensure_arrays(obj) fields = fieldnames(obj); for i = 1:length(fields) field = fields{i}; value = obj.(field); # 若字段为标量且非结构体、单元格类型,转为单元素数组 if isscalar(value) && ~isstruct(value) && ~iscell(value) obj.(field) = [value]; end end endfunction # 使用示例 j1 = jsondecode ('{"foo": [42]}'); j1 = ensure_arrays(j1); jsonencode(j1)
内容的提问来源于stack exchange,提问作者Mehmet Katircioglu
相关产品推荐
相关产品推荐

