Je suis nouveau à Pyspark. Mon exigence est d'obtenir / extraire les noms d'attribut à partir d'un fichier JSON imbriqué. J'ai essayé d'utiliser Json_Normalize importé de Pandas Package. Cela fonctionne pour les attributs directs mais ne récupère jamais les attributs des attributs de tableau JSON. Mon Json n'a pas de structure statique. Il varie pour chaque document que nous recevons. Quelqu'un pourrait-il m'aider s'il vous plaît avec explication du petit exemple fourni ci-dessous, surtout pour les éléments de matrice JSON .. p> Sortie attendue:
identifiant
Nom
Salaires.Salary
états.state
états.city.city`` p> p>
3 Réponses :
Si vous traitez le JSON comme un dictionnaire Python, cela devrait fonctionner.
Je viens d'écrire un programme de récursoir simple. P>
Script PRET> import json
def js_r(filename):
with open(filename) as f_in:
return(json.load(f_in))
g = js_r("city.json")
answer_d = {}
def base_line(g, answer_d):
for key in g.keys():
answer_d[key] = {}
return answer_d
answer_d = base_line(g, answer_d)
def recurser_func(g, answer_d):
for k in g.keys():
if type(g[k]) == type([]): #If the value is a list
answer_d[k] = {list(g[k][0].keys())[0]:{}}
if type(g[k]) == type({}): #If the value is a dictionary
answer_d[k] = {list(g[k].keys())[0]: {}} #set key equal to
answer_d[k] = recurser_func(g[k], answer_d[k])
return answer_d
recurser_func(g,answer_d)
def printer_func(answer_d, list_to_print, parent):
for k in answer_d.keys():
if len(answer_d[k].keys()) == 1:
list_to_print.append(parent)
list_to_print[-1] += k
list_to_print[-1] += "." + str(list(answer_d[k].keys())[0])
if len(answer_d[k].keys()) == 0:
list_to_print.append(parent)
list_to_print[-1] += k
if len(answer_d[k].keys()) > 1:
printer_func(answer_d[k], list_to_print, k + ".")
return list_to_print
l = printer_func(answer_d, [], "")
final = " ".join(l)
print(final)
Merci pour l'explication. Si je stocke le même contenu JSON dans un fichier (comme .json), je reçois l'erreur ci-dessous, la réponse_d [k] = {Liste (g [k] [0] .Keys ()) [0]: {}} attribututeError : 'str' objet n'a pas d'attribut 'Keys'. Je trouve un peu difficile de comprendre le code ici. La raison de la vérification de la liste est de trouver le tableau JSON ?? .. Merci encore pour votre aide !!
Voici la solution d'autre pour extraire tous les attributs imbriqués de JSON
My Python version: 2.7
Vous pouvez également faire de cette façon.
.states.state .states.cities.city .states.cities.city .id .salaries.salary .salaries.salary .name