<p>我不得不花了大约两个小时在这个问题上,但我想我有一些东西,可以工作的所有案件的基础上,你提供的格式。如果没有,我相信这将是一个小的变化。尽管您只要求提供这个想法,但由于我编写了代码,这里是Python代码。你知道吗</p>
<pre><code>import json
def to_json(cust_str):
from_index = 0
left_indices = []
levels = {}
level = 0
for i, char in enumerate(cust_str):
if char == '[':
level += 1
left_indices.append(i)
if level in levels:
levels[level] += 1
else:
levels[level] = 1
elif char == ']':
level -= 1
level = max(levels.keys())
value_stack = []
while True:
left_index = left_indices.pop()
right_index = cust_str.find(']', left_index) + 1
values = {}
pairs = cust_str[left_index:right_index][1:-1].split(',')
if levels[level] > 0:
for pair in pairs:
pair = pair.split('=')
values[pair[0].strip()] = pair[1]
else:
level -= 1
for pair in pairs:
pair = pair.split('=')
if pair[1][-1] == ' ':
values[pair[0].strip()] = value_stack.pop()
else:
values[pair[0].strip()] = pair[1]
value_stack.append(values)
levels[level] -= 1
cust_str = cust_str[:left_index] + cust_str[right_index:]
if levels[1] == 0:
return json.dumps(values)
if __name__ == '__main__':
# Data in custom format
cust_str = '[root=Root [key1=value1, key2=value2, key3=Key3 [key3_1=value3_1, key3_2=value3_2, key3_3=Key3_3 [key3_3_1=value3_3_1]], key4=value4]]'
# Data in JSON format
json_str = to_json(cust_str)
print json_str
</code></pre>
<p>其思想是,我们将<code>dict</code>以自定义格式映射到的级别数,以及不是与这些级别对应的字符串的值数。同时,我们跟踪给定字符串中<code>[</code>字符的索引。然后,我们从最里面的<code>dict</code>表示开始,弹出包含<code>[</code>(左)索引的堆栈并解析它们。在解析它们时,我们将它们从字符串中移除并继续。剩下的你可以在代码里读到。你知道吗</p>
<p>我根据你提供的数据运行了它,结果如下。你知道吗</p>
<pre><code>{
"root":{
"key2":"value2",
"key3":{
"key3_2":"value3_2",
"key3_3":{
"key3_3_1":"value3_3_1"
},
"key3_1":"value3_1"
},
"key1":"value1",
"key4":"value4"
}
}
</code></pre>
<p>为了确保它适用于更一般的情况,我使用了这个自定义字符串。你知道吗</p>
<pre><code>[root=Root [key1=value1, key2=Key2 [key2_1=value2_1], key3=Key3 [key3_1=value3_1, key3_2=Key3_2 [key3_2_1=value3_2_1], key3_3=Key3_3 [key3_3_1=value3_3_1]], key4=value4]]
</code></pre>
<p>并分析了它。你知道吗</p>
<pre><code>{
"root":{
"key2":{
"key2_1":"value2_1"
},
"key3":{
"key3_2":{
"key3_2_1":"value3_2_1"
},
"key3_3":{
"key3_3_1":"value3_3_1"
},
"key3_1":"value3_1"
},
"key1":"value1",
"key4":"value4"
}
}
</code></pre>
<p>据我所知,这就是它应该被解析的方式。另外,请记住,<strong>不要</strong>剥离这些值,因为逻辑依赖于值末尾的空格,这些值应该以<code>dict</code>作为值(如果这有意义的话)。你知道吗</p>