Python等效于R的fromJSON(),unlist(),attr()?

时间:2019-11-14 15:51:39

标签: python r json nested

我用R语言编写了一个代码,但是它不能处理我的繁重文件,因此我改用了Python。但是我一直在寻找R的3个Python等效功能,但没有找到令人满意的结果。

3个R函数是:

fromJSON()
unlist()
attr()

好的,让我向您展示我的问题,向我展示我的工作以及在R中获得的收益。现在,我想在Python中做同样的事情。

json_file <- '[
  {
    "id": "haha",
    "type": "table",
    "A": "HKD",
    "B": "HKD",
    "C": "HKD",
    "V": "HKD",
    "composition": [
      {
        "id": "AO",
        "type": "panier"
      },
      {
        "id": "KK",
        "type": "basket",
        "isAutoDiv": false,
        "composition": [
          {
            "id": "600",
            "type": "apple",
            "number": 1.11
          },
          {
            "id": "605",
            "type": "peach",
            "number": 1.79
          }
        ]
      },
      {
        "id": "KL",
        "type": "basket"
      }
    ]
  },
  {
    "id": "hoho",
    "type": "table",
    "composition": [
      {
        "id": "KT",
        "type": "panier"
      },
      {
        "id": "OT",
        "type": "panier"
      },
      {
        "id": "CL",
        "type": "basket",
        "isAutoDiv": false,
        "composition": [
          {
            "id": "450",
            "type": "apple"
          },
            {
            "id": "630",
            "type": "orange"
          },
          {
            "id": "023",
            "type": "orange",
            "composition": [
              {
                "id": "AOOOOOOO",
                "type": "orangejuice"
              },
              {
                "id": "VMVMVMVMV",
                "type": "orangejuice"
              }
            ]
          }
        ]
      }
    ]
  }
]'

现在我这样做: 1:

nestedjson <- fromJSON(json_file)

我可以得到:

[[1]]
[[1]]$id
[1] "haha"

[[1]]$type
[1] "table"

[[1]]$A
[1] "HKD"

[[1]]$B
[1] "HKD"

[[1]]$C
[1] "HKD"

[[1]]$V
[1] "HKD"

[[1]]$composition
[[1]]$composition[[1]]
[[1]]$composition[[1]]$id
[1] "AO"

[[1]]$composition[[1]]$type
[1] "panier"


[[1]]$composition[[2]]
[[1]]$composition[[2]]$id
[1] "KK"

[[1]]$composition[[2]]$type
[1] "basket"

[[1]]$composition[[2]]$isAutoDiv
[1] FALSE

[[1]]$composition[[2]]$composition
[[1]]$composition[[2]]$composition[[1]]
[[1]]$composition[[2]]$composition[[1]]$id
[1] "600"

[[1]]$composition[[2]]$composition[[1]]$type
[1] "apple"

[[1]]$composition[[2]]$composition[[1]]$number
[1] 1.11


[[1]]$composition[[2]]$composition[[2]]
[[1]]$composition[[2]]$composition[[2]]$id
[1] "605"

[[1]]$composition[[2]]$composition[[2]]$type
[1] "peach"

[[1]]$composition[[2]]$composition[[2]]$number
[1] 1.79




[[1]]$composition[[3]]
[[1]]$composition[[3]]$id
[1] "KL"

[[1]]$composition[[3]]$type
[1] "basket"




[[2]]
[[2]]$id
[1] "hoho"

[[2]]$type
[1] "table"

[[2]]$composition
[[2]]$composition[[1]]
[[2]]$composition[[1]]$id
[1] "KT"

[[2]]$composition[[1]]$type
[1] "panier"


[[2]]$composition[[2]]
[[2]]$composition[[2]]$id
[1] "OT"

[[2]]$composition[[2]]$type
[1] "panier"


[[2]]$composition[[3]]
[[2]]$composition[[3]]$id
[1] "CL"

[[2]]$composition[[3]]$type
[1] "basket"

[[2]]$composition[[3]]$isAutoDiv
[1] FALSE

[[2]]$composition[[3]]$composition
[[2]]$composition[[3]]$composition[[1]]
[[2]]$composition[[3]]$composition[[1]]$id
[1] "450"

[[2]]$composition[[3]]$composition[[1]]$type
[1] "apple"


[[2]]$composition[[3]]$composition[[2]]
[[2]]$composition[[3]]$composition[[2]]$id
[1] "630"

[[2]]$composition[[3]]$composition[[2]]$type
[1] "orange"


[[2]]$composition[[3]]$composition[[3]]
[[2]]$composition[[3]]$composition[[3]]$id
[1] "023"

[[2]]$composition[[3]]$composition[[3]]$type
[1] "orange"

[[2]]$composition[[3]]$composition[[3]]$composition
[[2]]$composition[[3]]$composition[[3]]$composition[[1]]
[[2]]$composition[[3]]$composition[[3]]$composition[[1]]$id
[1] "AOOOOOOO"

[[2]]$composition[[3]]$composition[[3]]$composition[[1]]$type
[1] "orangejuice"


[[2]]$composition[[3]]$composition[[3]]$composition[[2]]
[[2]]$composition[[3]]$composition[[3]]$composition[[2]]$id
[1] "VMVMVMVMV"

[[2]]$composition[[3]]$composition[[3]]$composition[[2]]$type
[1] "orangejuice"

然后我这样做2:

unnestedjson <- unlist(nestedjson) 

我可以得到:


   id 
                                  "haha" 
                                    type 
                                 "table" 
                                       A 
                                   "HKD" 
                                       B 
                                   "HKD" 
                                       C 
                                   "HKD" 
                                       V 
                                   "HKD" 
                          composition.id 
                                    "AO" 
                        composition.type 
                                "panier" 
                          composition.id 
                                    "KK" 
                        composition.type 
                                "basket" 
                   composition.isAutoDiv 
                                 "FALSE" 
              composition.composition.id 
                                   "600" 
            composition.composition.type 
                                 "apple" 
          composition.composition.number 
                                  "1.11" 
              composition.composition.id 
                                   "605" 
            composition.composition.type 
                                 "peach" 
          composition.composition.number 
                                  "1.79" 
                          composition.id 
                                    "KL" 
                        composition.type 
                                "basket" 
                                      id 
                                  "hoho" 
                                    type 
                                 "table" 
                          composition.id 
                                    "KT" 
                        composition.type 
                                "panier" 
                          composition.id 
                                    "OT" 
                        composition.type 
                                "panier" 
                          composition.id 
                                    "CL" 
                        composition.type 
                                "basket" 
                   composition.isAutoDiv 
                                 "FALSE" 
              composition.composition.id 
                                   "450" 
            composition.composition.type 
                                 "apple" 
              composition.composition.id 
                                   "630" 
            composition.composition.type 
                                "orange" 
              composition.composition.id 
                                   "023" 
            composition.composition.type 
                                "orange" 
  composition.composition.composition.id 
                              "AOOOOOOO" 
composition.composition.composition.type 
                           "orangejuice" 
  composition.composition.composition.id 
                             "VMVMVMVMV" 
composition.composition.composition.type 
                           "orangejuice" 

最后我这样做3:

unnestednames <- attr(unnestedjson, "names") 

我可以得到以下结果: 这就是我想要的Python代码: 名称列表,其中包含“组成”的属性名称。可以显示该属性处于哪个级别。

例如,第2个嵌套级别的属性的名称为“ composition.type”,第4个嵌套级别的属性的名称为“ composition.composition.composition.id”。

[1] "id"                                      
 [2] "type"                                    
 [3] "A"                                       
 [4] "B"                                       
 [5] "C"                                       
 [6] "V"                                       
 [7] "composition.id"                          
 [8] "composition.type"                        
 [9] "composition.id"                          
[10] "composition.type"                        
[11] "composition.isAutoDiv"                   
[12] "composition.composition.id"              
[13] "composition.composition.type"            
[14] "composition.composition.number"          
[15] "composition.composition.id"              
[16] "composition.composition.type"            
[17] "composition.composition.number"          
[18] "composition.id"                          
[19] "composition.type"                        
[20] "id"                                      
[21] "type"                                    
[22] "composition.id"                          
[23] "composition.type"                        
[24] "composition.id"                          
[25] "composition.type"                        
[26] "composition.id"                          
[27] "composition.type"                        
[28] "composition.isAutoDiv"                   
[29] "composition.composition.id"              
[30] "composition.composition.type"            
[31] "composition.composition.id"              
[32] "composition.composition.type"            
[33] "composition.composition.id"              
[34] "composition.composition.type"            
[35] "composition.composition.composition.id"  
[36] "composition.composition.composition.type"
[37] "composition.composition.composition.id"  
[38] "composition.composition.composition.type"

我一直在寻找一些Python函数,这些函数可以执行相同的操作,但没有发现任何东西。如果您有任何用Python进行这些操作的想法,那将解决我的大问题!

非常感谢!

1 个答案:

答案 0 :(得分:0)

我的回答是偏偏。我只解释了如何取消列出。

对于数字,我们不会像下面这样取消列出:

不列出号码
例如:

aa = [1,2,3,4]  


for i in aa:  
    print(i, end="" )  

对于字符串,我们需要像bleow一样取消列出:

c=["a", "ja", "ra", "ya", "ma"]  
ab= ",". join(c)   
print(ab)

使用Pd.series取消列表公开的其他方式
例如:

vector = [1,2,3,4,5]  
print(pd.Series(vector))  

再次想要转换为列表:

square_vector = pd.Series(vector)   
print(square_vector.tolist())