简体   繁体   English

将数组转换为json对象

[英]convert array to json object

I have a 2d array like so: 我有一个二维数组,像这样:

main_array -> [object,object,object,....] 

each object -> [ var_some_string,parent_id,some_random_int] -> fixed length

I need to convert this array into a json object like this.. 我需要将此数组转换为这样的json对象。

{ var_some_string: { var_some_string : { var_some_string: -1}}} 

The parent_id is the main_array object location which is the parent of the current object parent_id是main_array对象位置,它是当前对象的父对象

I hope that this question is understandable. 我希望这个问题是可以理解的。

main_array = [ 
               ["some_string0",-1,1], 
               ["some_string1",-1,1] , 
               ["some_string2",-1,1] ,
               ["some_string3",0,-1],
               ["some_string4",0,-1],
               ["some_string5",0,-1],
               ["some_string6",1,-1],
               ["some_string7",1,-1],
               ["some_string8",2,-1],
               ["some_string9",5,-1],
               ["some_string10",7,-1],
               ["some_string11",9,-1],
             ]

json object is this json对象是这个

main_json = { 
              'some_string0' : { 
                                 'some_string3' : -1000,
                                 'some_string4' : -1000,
                                 'some_string5' : {
                                           'some_string9' : {
                                                          'some_string11' : -1000
                                                             },
                                                  },
                               },
              'some_string1' : { 
                                 'some_string6' : -1000,
                                 'some_string7' : {
                                              'some_string10' : -1000,
                                                  }
                               } 
              'some_string2' : {
                                 'some_string8' : -1000
                               }
              }

I'm banging my head over how to solve this problem... 我正在努力解决这个问题...

def replace_empty_dict_with(d, value):
    for k, v in d.iteritems():
        if len(v) == 0:
            d[k] = value
        else:
            replace_empty_dict_with(v, value)

d = {}
w = {}
for node, pid, _ in main_array:
    if pid == -1:
        w[node] = d[node] = {}
    else:
        parent = main_array[pid][0]
        w[node] = w[parent][node] = {}

replace_empty_dict_with(d, -1)
import pprint
pprint.pprint(d)

output: 输出:

{'some_string0': {'some_string3': -1,
                  'some_string4': -1,
                  'some_string5': {'some_string9': {'some_string11': -1}}},
 'some_string1': {'some_string6': -1, 'some_string7': {'some_string10': -1}},
 'some_string2': {'some_string8': -1}}

I understood the task a bit differently. 我对任务的理解有所不同。 I thought some_random_int was supposed to become the value in the final dictionary (not necessarily -1). 我以为some_random_int应该成为最终字典中的值(不一定是-1)。

 main_json = {}
 id_to_dict_reference = {
      -1: main_json
 }
 id_to_container = {}
 id_to_key_name = {}

 for id, (var_some_string, parent_id, some_random_int) in enumerate(main_array):
      id_to_key_name[id] = var_some_string
      dict_reference = id_to_dict_reference[parent_id]

      if dict_reference is None:
           parent_container = id_to_container[parent_id]
           key_name = id_to_key_name[parent_id]
           if not isinstance(parent_container[key_name], dict):
                parent_container[key_name] = {}
           parent_container[key_name][var_some_string] = some_random_int
           id_to_dict_reference[id] = None
           id_to_container[id] = parent_container[key_name]
           id_to_dict_reference[parent_id] = parent_container[key_name]
      else:
           dict_reference[var_some_string] = some_random_int
           id_to_container[id] = dict_reference
           id_to_dict_reference[id] = None

 print main_json

output: 输出:

 {'some_string0': {'some_string3': -1,
                   'some_string4': -1,
                   'some_string5': {'some_string9': {'some_string11': -1}}},
  'some_string1': {'some_string6': -1, 'some_string7': {'some_string10': -1}},
  'some_string2': {'some_string8': -1}}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM