流式JSON算法 - 没有堆栈

时间:2011-02-02 19:01:21

标签: algorithm streaming stack

是否可以设计一个流式JSON算法,将JSON直接写入具有以下属性的套接字:

* can only write to, but cannot delete or seek within the stream
* does not use either an IMPLICIT or explicit stack
* uses only a constant amount of memory stack depth no matter how deep the object nesting within the json

{ “1”:{ “1”:{ “1”:{ “1”:{ “1”:{ “1”:{ “1”:{ “1”:{ “1”:{” 1 “:{” 1 “:{” 1 “:{” 1 “:{” 1 “:{” 1 “:{” 1" :{...}}}}}}}}}}}}} }}}}

2 个答案:

答案 0 :(得分:1)

简短回答:不。

稍微长一点:至少在一般情况下不是这样。如果你可以保证嵌套没有分支,你可以使用一个简单的计数器来关闭最后的括号。

答案 1 :(得分:0)

不,因为您可以使用这样的程序将无限量的内存压缩到有限的空间中。

编码实施:

input = read('LIBRARY_OF_CONGRESS.tar.bz2')
input_binary = convert_to_binary(input)
json_opening = replace({'0':'[', '1':'{'}, input_binary)
your_program <INPUTPIPE >/dev/null
INPUTPIPE << json_opening

执行上述程序,然后克隆正在运行的虚拟机。这是无限大输入数据集的有限空间压缩版本。然后解码...

解码实施:

set_output_pipe(your_program, OUTPUTPIPE)
INPUTPIPE << EOL
json_closing << OUTPUTPIPE
output_binary = replace({']':'0', '}':'1'}, reverse(json_closing))
output = convert_from_binary(output_binary)
write(output, 'LIBRARY_OF_CONGRESS-copy.tar.bz2')

当然,所有优秀的代码都应该有一个测试用例...

测试用例:

bc 'LIBRARY_OF_CONGRESS.tar.bz2' 'LIBRARY_OF_CONGRESS-copy.tar.bz2'