Hướng dẫn create nested json python - tạo trăn json lồng nhau

Những gì @Andrea-F có vẻ tốt với tôi, đây là một giải pháp khác:

Hãy chọn trong cả hai :)

import json

dic = {
        "bomber": [1, 2, 3, 4, 5],
        "irritation": [1, 3, 5, 7, 8]
      }

filename = "abc.pdf"

json_dict = {}
data = []

for k, v in dic.iteritems():
  tmp_dict = {}
  tmp_dict["keyword"] = k
  tmp_dict["term_freq"] = len(v)
  tmp_dict["lists"] = [{"occurrance": i} for i in v]
  data.append(tmp_dict)

json_dict["filename"] = filename
json_dict["data"] = data

with open("abc.json", "w") as outfile:
    json.dump(json_dict, outfile, indent=4, sort_keys=True)

Đó là cùng một ý tưởng, trước tiên tôi tạo ra một

json_dict["data"] = [{"keyword": k, "term_freq": len(v), "lists": [{"occurrance": i} for i in v]} for k, v in dic.iteritems()]
6 lớn để được lưu trực tiếp trong JSON. Tôi sử dụng câu lệnh
json_dict["data"] = [{"keyword": k, "term_freq": len(v), "lists": [{"occurrance": i} for i in v]} for k, v in dic.iteritems()]
7 để lưu json tránh bắt
json_dict["data"] = [{"keyword": k, "term_freq": len(v), "lists": [{"occurrance": i} for i in v]} for k, v in dic.iteritems()]
8

Ngoài ra, bạn nên có một cái nhìn về tài liệu của

json_dict["data"] = [{"keyword": k, "term_freq": len(v), "lists": [{"occurrance": i} for i in v]} for k, v in dic.iteritems()]
9 nếu bạn cần cải thiện trong tương lai trong đầu ra
import json

json_dict = {
              "filename": "abc.pdf",
              "data": [{
                        "keyword": k,
                        "term_freq": len(v),
                        "lists": [{"occurrance": i} for i in v]
                       } for k, v in dic.iteritems()]
            }

with open("abc.json", "w") as outfile:
    json.dump(json_dict, outfile, indent=4, sort_keys=True)
0 của mình.

CHỈNH SỬA

Và chỉ để cho vui, nếu bạn không thích

import json

json_dict = {
              "filename": "abc.pdf",
              "data": [{
                        "keyword": k,
                        "term_freq": len(v),
                        "lists": [{"occurrance": i} for i in v]
                       } for k, v in dic.iteritems()]
            }

with open("abc.json", "w") as outfile:
    json.dump(json_dict, outfile, indent=4, sort_keys=True)
1 var, bạn có thể thực hiện tất cả các vòng lặp
import json

json_dict = {
              "filename": "abc.pdf",
              "data": [{
                        "keyword": k,
                        "term_freq": len(v),
                        "lists": [{"occurrance": i} for i in v]
                       } for k, v in dic.iteritems()]
            }

with open("abc.json", "w") as outfile:
    json.dump(json_dict, outfile, indent=4, sort_keys=True)
2 trong một lớp lót :)
json_dict["data"] = [{"keyword": k, "term_freq": len(v), "lists": [{"occurrance": i} for i in v]} for k, v in dic.iteritems()]

Nó có thể cung cấp cho giải pháp cuối cùng một cái gì đó không hoàn toàn dễ đọc như sau:

import json

json_dict = {
              "filename": "abc.pdf",
              "data": [{
                        "keyword": k,
                        "term_freq": len(v),
                        "lists": [{"occurrance": i} for i in v]
                       } for k, v in dic.iteritems()]
            }

with open("abc.json", "w") as outfile:
    json.dump(json_dict, outfile, indent=4, sort_keys=True)

Chỉnh sửa 2

Có vẻ như bạn không muốn lưu

import json

json_dict = {
              "filename": "abc.pdf",
              "data": [{
                        "keyword": k,
                        "term_freq": len(v),
                        "lists": [{"occurrance": i} for i in v]
                       } for k, v in dic.iteritems()]
            }

with open("abc.json", "w") as outfile:
    json.dump(json_dict, outfile, indent=4, sort_keys=True)
0 của mình dưới dạng đầu ra mong muốn, nhưng hãy đọc nó.

Trên thực tế, bạn cũng có thể sử dụng

json_dict["data"] = [{"keyword": k, "term_freq": len(v), "lists": [{"occurrance": i} for i in v]} for k, v in dic.iteritems()]
9 để in JSON của bạn.
json_dict["data"] = [{"keyword": k, "term_freq": len(v), "lists": [{"occurrance": i} for i in v]} for k, v in dic.iteritems()]
2

Tuy nhiên, vẫn còn một vấn đề ở đây,

import json

json_dict = {
              "filename": "abc.pdf",
              "data": [{
                        "keyword": k,
                        "term_freq": len(v),
                        "lists": [{"occurrance": i} for i in v]
                       } for k, v in dic.iteritems()]
            }

with open("abc.json", "w") as outfile:
    json.dump(json_dict, outfile, indent=4, sort_keys=True)
5 được in ở cuối danh sách vì
import json

json_dict = {
              "filename": "abc.pdf",
              "data": [{
                        "keyword": k,
                        "term_freq": len(v),
                        "lists": [{"occurrance": i} for i in v]
                       } for k, v in dic.iteritems()]
            }

with open("abc.json", "w") as outfile:
    json.dump(json_dict, outfile, indent=4, sort_keys=True)
6 của
import json

json_dict = {
              "filename": "abc.pdf",
              "data": [{
                        "keyword": k,
                        "term_freq": len(v),
                        "lists": [{"occurrance": i} for i in v]
                       } for k, v in dic.iteritems()]
            }

with open("abc.json", "w") as outfile:
    json.dump(json_dict, outfile, indent=4, sort_keys=True)
7 xuất hiện trước
import json

json_dict = {
              "filename": "abc.pdf",
              "data": [{
                        "keyword": k,
                        "term_freq": len(v),
                        "lists": [{"occurrance": i} for i in v]
                       } for k, v in dic.iteritems()]
            }

with open("abc.json", "w") as outfile:
    json.dump(json_dict, outfile, indent=4, sort_keys=True)
8.

Để buộc trật tự, bạn sẽ phải sử dụng

import json

json_dict = {
              "filename": "abc.pdf",
              "data": [{
                        "keyword": k,
                        "term_freq": len(v),
                        "lists": [{"occurrance": i} for i in v]
                       } for k, v in dic.iteritems()]
            }

with open("abc.json", "w") as outfile:
    json.dump(json_dict, outfile, indent=4, sort_keys=True)
9 trong thế hệ của dict. Cẩn thận cú pháp là xấu (IMO) với
json_dict["data"] = [{"keyword": k, "term_freq": len(v), "lists": [{"occurrance": i} for i in v]} for k, v in dic.iteritems()]
20

Đây là giải pháp hoàn chỉnh mới;)

json_dict["data"] = [{"keyword": k, "term_freq": len(v), "lists": [{"occurrance": i} for i in v]} for k, v in dic.iteritems()]
9

Sẽ đầu ra:

json_dict["data"] = [{"keyword": k, "term_freq": len(v), "lists": [{"occurrance": i} for i in v]} for k, v in dic.iteritems()]
0

Nhưng hãy cẩn thận, hầu hết thời gian, tốt hơn là lưu một tệp

json_dict["data"] = [{"keyword": k, "term_freq": len(v), "lists": [{"occurrance": i} for i in v]} for k, v in dic.iteritems()]
21 thông thường để là ngôn ngữ chéo.
  • Tất cả các cộng đồng
  • Ý tưởng ArcGIS
  • Cơ bản cộng đồng
  • Nhà
  • Tất cả các cộng đồng
  • Ý tưởng ArcGIS
  • Cơ bản cộng đồng
  • Nhà
  • Nhà phát triển

Python

  • Câu hỏi Python
  • Python để tạo chuỗi JSON lồng nhau động
  • Tùy chọn
  • Đăng ký nguồn cấp dữ liệu RSS
  • Đánh dấu chủ đề là mới
  • Đánh dấu chủ đề như đã đọc
  • Nổi chủ đề này cho người dùng hiện tại
  • Đánh dấu

Đặt mua

Tắt tiếng

Trang thân thiện với máy in

json_dict["data"] = [{"keyword": k, "term_freq": len(v), "lists": [{"occurrance": i} for i in v]} for k, v in dic.iteritems()]
2

Lời chào, sử dụng con trỏ tìm kiếm python và arcpy, tôi đã trích xuất (các) danh sách từ điển có chứa các cặp giá trị khóa được chuẩn hóa có nguồn gốc từ các bảng cụ thể nhưng nằm trong lớp cơ sở dữ liệu được vóc dáng. Trong cùng một tập lệnh, bây giờ tôi là & nbsp; tạo một chuỗi JSON với một đối tượng chứa các mảng cặp và giá trị [] đó & nbsp; có chứa & nbsp; . Có một đối tượng 'chèn' được tạo cho mỗi bảng nguồn mà dữ liệu được chưng cất nên tôi kết thúc bằng cấu trúc & nbsp; có các mảng trường & giá trị có trong các đối tượng có trong các mảng 'chèn' có trong các đối tượng có trong các mảng 'bảng' có chứa Trong đối tượng JSON như sau: {"TableInserts": [{"chèn": [{'trường ": []," giá trị ": [] & nbsp; & nbsp; & nbsp;} & nbsp; & nbsp; & nbsp;] ; & nbsp;} & nbsp; & nbsp; & nbsp;}. & nbsp;

Tôi đã có tập lệnh Python của mình để loại bỏ cấu trúc tôi theo sau nhưng tôi gặp khó khăn trong việc tách các cặp giá trị chính có trong danh sách các cấu trúc từ điển của tôi vào các mảng JSON mục tiêu và giá trị tương ứng của chúng. & NBSP;    "table": "place_nm",      "inserts": [           
    "table": "place_nm",
     "inserts": [
           

                              {                                    "fields": [                                    "fields": [
                                    "fields": [

Python                                       "lu_stat_id": 1,                                       "lu_use_desig_id": 1,                                        "place_nm": ""
                                       "lu_stat_id": 1,
                                       "lu_use_desig_id": 1,
                                        "place_nm": ""

Một phần của cấu trúc chuỗi JSON được sản xuất:                                      ]                                 }
                                      ]
                                 }


                     ]

},

Whereas I need it to produce (specifically, breaking key value pairs being parsed from dictionaries into "fields": & "values": arrays):

{
   "table": "place_nm",
   "inserts": [
                              {
                                    "fields": [
                                       "lu_stat_id",
                                       "lu_use_desig_id",
                                        "place_nm"
                                      ],
                                       "values": [
                                             1,
                                             1,
                                             
                                       ]
                                 }

                        ]
},

The challenge is that the dictNorm dictionary structure references lists of dictionaries for the individual key value pairs I want to separate out so I need to unpack key value pairs existing in dictionaries wrapped in lists that are inside of a dictionary. 

I'm thinking I need another for loop iterator below line 13 to parse through these sub lists of dictionaries called in the dictNorm structure which if you were to print out dictNorm, a specific dictionary contained within would look like: 

'place_nm': [

                        {'lu_stat_id': 1, 'lu_use_desig_id': 1, 'place_nm': u'National Monument'},
                        {'lu_stat_id': 1, 'lu_use_desig_id': 1, 'place_nm': u'Joe's Bar'},
                        {'lu_stat_id': 1, 'lu_use_desig_id': 1, 'place_nm': u'Pike's Peak'},
                        {'lu_stat_id': 1, 'lu_use_desig_id': 1, 'place_nm': u'Niagara Falls'},
                        {'lu_stat_id': 1, 'lu_use_desig_id': 1, 'place_nm': u'Dulles Airport'},
                        {'lu_stat_id': 1, 'lu_use_desig_id': 1, 'place_nm': u'Bay Bridge'},
                        {'lu_stat_id': 1, 'lu_use_desig_id': 1, 'place_nm': u'Bagram Airfield'},
                        {'lu_stat_id': 1, 'lu_use_desig_id': 1, 'place_nm': u'McDonals'},

                     ]

Any assistance would be appreciated as I know I have a lot going on here before getting to the JSON construction piece. 

  • dictionary
  • json
  • python
  • All Posts
  • Previous Topic
  • Next Topic

1 Solution

Is this what you are after?

json_dict["data"] = [{"keyword": k, "term_freq": len(v), "lists": [{"occurrance": i} for i in v]} for k, v in dic.iteritems()]
3

8 Replies

You talk about needing JSON but the code beneath "Whereas I need it to produce" isn't valid JSON.

Yes it was my own "freehand" JSON provided as an example to show the key value pairs in a single array as they exist in their original dictionary structure and not separated out into "fields": and "values": arrays. I've corrected the non valid JSON. 

Is this what you are after?

json_dict["data"] = [{"keyword": k, "term_freq": len(v), "lists": [{"occurrance": i} for i in v]} for k, v in dic.iteritems()]
3

Yes indeed. I couldn't quite figure out how to construct that inner most for loop in the TNFL. I see you picked up on some clues to the larger JSON string being constructed. I just modified it to fit the larger string structure and to iterate through multiple lists of dictionaries each containing distilled information from a specific table. 

json_dict["data"] = [{"keyword": k, "term_freq": len(v), "lists": [{"occurrance": i} for i in v]} for k, v in dic.iteritems()]
5

Output:

[
   {
      "table": "place_nm",
      "inserts": [
            {
                  "fields": [
                     "lu_stat_id",
                      "lu_use_desig_id",
                       "place_nm"
                   ],
                    "values": [
                        1,
                        1,
                        "National Monument"
                    ]
            },
            {
                    "fields": [
                       "lu_stat_id",
                        "lu_use_desig_id",
                        "place_nm"
                     ],
                     "values": [
                        2,
                        1,
                        "Dulles Airport"
                     ]
              }
        ]
   },
   {
      "table": "place",
      "inserts": [
            {
                   "fields": [
                     "lu_stat_id",
                     "lu_use_desig_id"
                     ],
                    "values": [
                       1,
                       1
                     ]
              }
        ]
   }, 
   {
      "table": "place_geom_p",
      "inserts": [
            {
                   "fields": [
                     "latitude",
                     "longitude"
                    ],
                   "values": [
                      5.55555,
                      55.55555
                    ]
            }, 
            {
                    "fields": [
                       "latitude",
                       "longitude"
                     ],
                     "values": [
                       4.444444,
                       44.44444
                     ]
              }
        ]
   }, 
   {
     "table": "place_type",
     "inserts": [
           {
                     "fields": [
                       "lu_stat_id",
                       "lu_hg_place_type_id",
                       "lu_use_desig_id",
                       "lu_use_rank_num"
                     ],
                     "values": [
                       1,
                       1,
                       1,
                       1
                     ]
              }
        ]
   }
]            

Bây giờ tôi đang cố gắng đặt trình bao bọc đối tượng JSON bên ngoài {} có chứa siêu dữ liệu về dữ liệu có trong chuỗi chúng tôi đã tạo cho đến nay xung quanh điều này. Ban đầu tôi nghĩ rằng điều này sẽ thẳng thắn nhưng tôi bị vấp ngã. Tôi có một bộ ba thứ tự lồng nhau mà tôi đã tạo ra bắt chước từ điển trong danh sách trong cấu trúc từ điển Tôi đang gọi dữ liệu của mình từ đó tạo ra cấu trúc chuỗi JSON đầy đủ bên dưới nhưng tôi không thể tích hợp hoặc tạo lại logic TNFL ở trên lấy và giải nén giá trị chính Các cặp từ cấu trúc dict bên trong hầu hết tôi đang lấy dữ liệu và giải nén chúng vào các "trường" tương ứng của chúng: và "giá trị": mảng. Điều này thậm chí có thể thực hiện & nbsp; (nối thêm cấu trúc bên trong và đặt hàng) hoặc i & nbsp; điều chỉnh lửa và thử & nbsp; để tạo & nbsp;

json_dict["data"] = [{"keyword": k, "term_freq": len(v), "lists": [{"occurrance": i} for i in v]} for k, v in dic.iteritems()]
0

Output:

{"metafield1": "somedata", "metafield2": null, "metafield3": "somedata", "metafield4": 100000000, "entityType": "địa điểm", "pableinserts": [& nbsp; & nbsp; ; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; ; & nbsp; & nbsp; "Trường": [], & nbsp; ": [] & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; ; & nbsp;] & nbsp; & nbsp; & nbsp;}, & nbsp; ; & nbsp; "chèn": [& nbsp; & nbsp; & nbsp; p; {& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; {& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; "giá trị": [] bsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; "chèn": [& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; ; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; ; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;} "metafield1": "somedata", "metafield2": null, "metafield3": "somedata", "metafield4": 100000000, "EntityType": "PLACE", "tableInserts": [    {       "table": "place_nm",        "inserts": [                {                   "fields": [],                   "values": []                }          ]    },    {       "table": "place",        "inserts": [               {                  "fields": [],                   "values": []               }         ]   },    {         "table": "place_geom_p",        "inserts": [               {                  "fields": [],                   "values": []               }         ]   },    { "table": "place_type",        "inserts": [               {                  "fields": [],                   "values": []               }         ]   } ]}
"metafield1": "somedata",
"metafield2": null,
"metafield3": "somedata",
"metafield4": 100000000,
"EntityType": "PLACE",
"tableInserts": [
   {
      "table": "place_nm",
       "inserts": [
               {
                  "fields": [],
                  "values": []
               }
         ]
   },
   {
      "table": "place",
       "inserts": [
               {
                  "fields": [], 
                  "values": []
               }
         ]
   }, 
   {
        "table": "place_geom_p",
       "inserts": [
               {
                  "fields": [], 
                  "values": []
               }
         ]
   }, 
   {
"table": "place_type",
       "inserts": [
               {
                  "fields": [], 
                  "values": []
               }
         ]
   }
 ]
}

Những gì tôi muốn làm nhưng không thể lặp lại và nối vào bên trong danh sách có tên "bên trong" bên trong OrderedDict:

json_dict["data"] = [{"keyword": k, "term_freq": len(v), "lists": [{"occurrance": i} for i in v]} for k, v in dic.iteritems()]
1

Điều này có hoạt động không (tôi nghĩ nó hơi khác so với những gì bạn muốn)?

json_dict["data"] = [{"keyword": k, "term_freq": len(v), "lists": [{"occurrance": i} for i in v]} for k, v in dic.iteritems()]
2

Nếu đoạn mã ở trên không phải là những gì bạn muốn, tôi nghĩ rằng có một cách để có được nó bằng cách sử dụng DefaultDict. & NBSP; Điều đó nói rằng, tôi không đề nghị bạn đi xuống con đường này về cấu trúc mã. & NBSP; Mặc dù cô đọng, điều này đang tiếp cận Code Golf, rất thú vị nhưng tạo ra mã khó đọc và bảo trì. & NBSP; Tôi khuyên bạn nên khử nest khối mã constjson của bạn bằng cách sử dụng các vòng lặp bên ngoài hoặc xác định hàm và gọi nó cho các kết quả bạn muốn để chèn và giá trị.

Cảm ơn! Mod nhẹ để bật & nbsp; cho các vòng lặp trong cấu trúc vòng được lồng cho các lớp & nbsp; các lớp ordereddict () tương ứng & nbsp; và nó hoạt động rất đẹp:

json_dict["data"] = [{"keyword": k, "term_freq": len(v), "lists": [{"occurrance": i} for i in v]} for k, v in dic.iteritems()]
3

Vì vậy, tôi có một lớp phức tạp khác đã được thêm vào điều này với một thông số JSON mới. rằng tôi không thể tìm ra. Nghĩa là thêm một mảng bổ sung 'nestedTableInsert' chứa các mảng cho các khóa và một mảng cho các giá trị nhưng chỉ cho một bảng cụ thể, tức là khi bảng 'K' có một tên cụ thể. Tôi đã tạo ra cấu trúc nhưng không biết làm thế nào để tạo thêm 'NestedTableInsert' tạo đối tượng này có điều kiện & nbsp; trên k = 'TABLE_X' chẳng hạn. Tôi tò mò về việc nếu điều này có thể được thực hiện với các cấu trúc được đặt hàng lồng nhau () hoặc nếu tôi sẽ phải quay lại bảng vẽ cho cách tiếp cận của tôi ở đây.

json_dict["data"] = [{"keyword": k, "term_freq": len(v), "lists": [{"occurrance": i} for i in v]} for k, v in dic.iteritems()]
4

Vì vậy, dưới đây, & nbsp; hoàn thành những gì tôi đang cố gắng làm ở trên.Tôi chỉ cần tìm ra cách đảm bảo rằng NestedTableInsert & nbsp; chứa dữ liệu cho mảng tên mà nó đang được lồng vào.Hiện tại nó chỉ tạo ra cùng một dữ liệu trong mảng lồng nhau cho nhiều mảng chèn place_nm được tạo.Hmmm ... & nbsp;

json_dict["data"] = [{"keyword": k, "term_freq": len(v), "lists": [{"occurrance": i} for i in v]} for k, v in dic.iteritems()]
5

Hướng dẫn create nested json python - tạo trăn json lồng nhau

  • Điều khoản sử dụng
  • Hướng dẫn cộng đồng
  • Cơ bản cộng đồng
  • Sự riêng tư
  • Trung tâm Tin tưởng
  • Hợp pháp
  • Liên hệ với ESRI