我的预期
希望通过 Emacs 生产如下文本内容:
{
version: 1,
mediaFileName: '十月围城-粤语.mp4',
cutSegments: [
{
start: 4317.84,
end: 4472.12,
name: '',
}
]
}
注意里面 cutSegments
内的形式:
如果只有一组数据时是:
cutSegments: [
{
start: 4317.84,
end: 4472.12,
name: '',
}
]
有多组数据时是;
cutSegments: [
{
start: 4317.84,
end: 4472.12,
name: '',
},
{
start: 6803.04,
end: 6846.48,
name: '',
},
{
start: 7033,
end: 7772.56,
name: '',
}
]
我的实现
(setq video-source "十月围城-粤语.mp4")
(setq video-timestamp-start 4317.84)
(setq video-timestamp-stop 4472.12)
(setq result (make-hash-table :test 'equal))
(puthash `,video-source `(:version 1 :mediaFileName ,video-source :cutSegments ((:start ,video-timestamp-start :end ,video-timestamp-stop))) result )
(print (json-encode (gethash `,video-source result)))
得到结果却是:
{"version":1,
"mediaFileName":"十月围城-粤语.mp4",
"cutSegments":{"start":[4317.84,"end",4472.12]}
}
注意 cutSegments 的内容在只有一个时,不是我期望的(类似 Python 列表中嵌套字典):
cutSegments: [
{
start: 4317.84,
end: 4472.12,
name: '',
}
]
却是:
"cutSegments":{
"start":
[4317.84,"end",4472.12]
}
后来我在
(puthash `,video-source `(:version 1 :mediaFileName ,video-source :cutSegments ((:start ,video-timestamp-start :end ,video-timestamp-stop))) result )
中手动加入一个空列表
变成:
(puthash `,video-source `(:version 1 :mediaFileName ,video-source :cutSegments ((:start ,video-timestamp-start :end ,video-timestamp-stop) ())) result ))
输出结果变成:
(:version 1
:mediaFileName 十月围城-粤语.mp4
:cutSegments ((:start 4317.84 :end 4472.12) nil))
注意 cutSegments
的形式才变成我预期的。
但是结果 cutSegments 中多了 nil
。
而 nil 在其他软件无法识别。
问题
如何解决在 cutSegment 的数据只有一组时,输出结果形式和预期不一致?