Συζήτηση
Γεια χαρά, Επισκέπτης
Όνομα χρήστη: Κωδικός: Να με θυμάσαι

ΘΕΜΑ: Δημιουργία json αρχειου - πολλαλπλό nesting πεδιων

Δημιουργία json αρχειου - πολλαλπλό nesting πεδιων 2 Μήνες 2 Εβδομάδες πριν #4856

  • Danee
  • Το Άβαταρ του/της Danee
  • Αποσυνδεμένος
  • py____
  • ** The code is with me, I am one with the code.**
  • Δημοσιεύσεις: 18
Γειά σας!

Προσπαθώ να ποστάρω δεδομένα στο Διαύγεια(κρατικό πρότζεκτ όπου αναρτούνται πράξεις).
Το μοντέλο της απόφασης(μιας από τις πολλές) είναι αυτο ,αν θελετε να ρίξετε μία ματια:
test3.diavgeia.gov.gr/luminapi/opendata/...s/Β.1.3/details.json (ναι, τα παίρνω σε json).

Αφού λοιπόν ο χρήστης συμπλήρωσει όσο πεδία θέλει απο την φόρμα, κάνοντας submit πρέπει να δημιουργηθεί ένα αρχείο json της εξής μορφής(παραθέτω παράδειγμα για την απόφαση που έχω δώσει πιό πάνω).
{
  "publish": true,
  "signerIds": [
    "10911"
  ],
  "unitIds": [
    "10602"
  ],
  "decisionTypeId": "Β.1.3",
  "subject": "ΑΠΟΦΑΣΗ ΑΝΑΛΗΨΗΣ ΥΠΟΧΡΕΩΣΗΣ",
  "thematicCategoryIds": [
    "20"
  ],
  "protocolNumber": "2014/1/001",
  "issueDate": "2014-06-20T00:00:00.000Z",
  "organizationId": "10599",
  "extraFieldValues": {
    "financialYear": 2014,
    "budgettype": "Τακτικός Προϋπολογισμός",
    "entryNumber": "1000",
    "partialead": false,
    "recalledExpenseDecision": false,
    "amountWithVAT": {
      "amount": 150,
      "currency": "EUR"
    },
    "amountWithKae": [
      {
        "kae": "1234",
        "amountWithVAT": 100
      },
      {
        "kae": "4321",
        "amountWithVAT": 50
      }
    ],
    "relatedDecisions": []
  }
}


Το πρόβλημα μου είναι πως δεν μπορώ να βγάλω το πολλαπλό nesting στα πεδία που υπάρχει...

Παράδειγμα:
Το πεδίο amountWithKae, βρίσκεται μέσα στο extraFieldValues και περίεχει τα πεδια kae και amountWithVAT. Συν πως εδώ μιλάμε για για πολλαπλές τιμες όπως φαίνεται στο json παραδειγμα...
May the code be with you always!
Τελευταία διόρθωση: 2 Μήνες 2 Εβδομάδες πριν από Danee.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

Δημιουργία json αρχειου - πολλαλπλό nesting πεδιων 2 Μήνες 2 Εβδομάδες πριν #4857

  • embryo
  • Το Άβαταρ του/της embryo
  • Αποσυνδεμένος
  • pyth__
  • Δημοσιεύσεις: 83
  • Ληφθείσες Ευχαριστίες 30
Το λινκ είναι 404 (δεν υπάρχει)
Με ποιο library δουλεύεις?
Το json που έχει μέσα η Python?
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

Δημιουργία json αρχειου - πολλαλπλό nesting πεδιων 2 Μήνες 2 Εβδομάδες πριν #4858

  • Danee
  • Το Άβαταρ του/της Danee
  • Αποσυνδεμένος
  • py____
  • ** The code is with me, I am one with the code.**
  • Δημοσιεύσεις: 18
Εχεις δίκιο για το λινκ! Σορρυ κεκτημένη ταχύτητα. Το διόρθωσα.
Library..το requests μονο.
Το πρότζεκτ μου είναι στημένο με django.

Τι εννοείς το json που έχει μέσα η Python?

Ισως θα έπρεπε να διευκρινίσω πως αυτά τα πεδία τα παίρνω δυναμικά κάθε φορα, αναλόγως το τύπο Απόφασης που επιλέγει ο χρήστης. Συμπληρώνει τα παιδία στην φόρμα και μόλις κάνει submit πρέπει να παραχθεί το json αρχείο με τη συγκεκριμένη μορφή που δίνω στο ποστ μου.
May the code be with you always!
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

Δημιουργία json αρχειου - πολλαλπλό nesting πεδιων 2 Μήνες 2 Εβδομάδες πριν #4861

  • embryo
  • Το Άβαταρ του/της embryo
  • Αποσυνδεμένος
  • pyth__
  • Δημοσιεύσεις: 83
  • Ληφθείσες Ευχαριστίες 30
Από Jango δεν ξέρω τίποτα..
Υπάρχει το json library της Python (bult in) που χειρίζεται τα json.
Ο τρόπος που το κάνω είναι ο εξής:
import json
 
with open("details.json", 'r') as json_file:
    details = json.loads(json_file.read())
 
    details["allowedInDecisions"] = False  # do whatever here...
 
    with open("detailsX.json", 'w+') as json_file_out:
        json_file_out.write(json.dumps(details, sort_keys=True, indent=4))
Αυτό με διάβασμα/σώσιμο αρχείου.
Αν το παίρνεις σαν data δεν χρειάζεσαι τα "with open"...
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

Δημιουργία json αρχειου - πολλαλπλό nesting πεδιων 2 Μήνες 2 Εβδομάδες πριν #4862

  • Danee
  • Το Άβαταρ του/της Danee
  • Αποσυνδεμένος
  • py____
  • ** The code is with me, I am one with the code.**
  • Δημοσιεύσεις: 18
@embryo σε ευχαριστώ πολύ για την βοηθειά σου αλλα αυτό το κομμάτι ,το πώς να δημιουργήσω το json file το έχω καλυψεί. Αυτό που δεν μου βγαίνει είναι το να δημιουργήσω το son object που θα γραφτεί στο αρχείο,δυναμικά. Δηλαδή να κάνω iterate στα πεδία του μοντέλου που μου δίνουν και να βγάλω το json διαμορφωμένο όπως το παράδειγμα. Μέχρι στιγμής το έχω κάνει και εγώ hard-coded ,σαν το δικό σου παράδειγμα.
May the code be with you always!
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

Δημιουργία json αρχειου - πολλαλπλό nesting πεδιων 2 Μήνες 2 Εβδομάδες πριν #4863

  • Theo
  • Το Άβαταρ του/της Theo
  • Αποσυνδεμένος
  • pytho_
  • Δημοσιεύσεις: 221
  • Ληφθείσες Ευχαριστίες 58
Δες αυτό μήπως σου κάνει
docs.djangoproject.com/en/1.11/topics/se...ization-formats-json
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

Δημιουργία json αρχειου - πολλαλπλό nesting πεδιων 1 Μήνας 2 Εβδομάδες πριν #4932

  • Tassos
  • Το Άβαταρ του/της Tassos
  • Αποσυνδεμένος
  • pyth__
  • g-lts.info
  • Δημοσιεύσεις: 69
  • Ληφθείσες Ευχαριστίες 3
Για να είμαι ειλικρινής, δεν έχω καταλάβει απόλυτα τι είναι αυτό ακριβώς που θέλεις. αλλά νομίζω πως θέλεις να δημιουργείς ένα δυναμικό JSON ( που να έχει και εμφωλευμένα πεδία ).

Αν λοιπόν κατάλαβα καλά..
Καταρχήν βλέπω πως υπάρχει το σταθερό μοτίβο :

{
  "uid": - ,
  "label": - ,
  "parent": - ,
  "allowedInDecisions": - ,
  "extraFields": [ - ]
}

Και πάλι μέσα στο μπλοκ «extraFields» μπορεί να εμπεριέχει ένα σταθερό πράγμα ( όσες φορές χρειαστεί ) :

  "uid": - ,
  "label": - ,
  "help": - ,
  "type": - ,
  "validation": - ,
  "required": - ,
  "multiple": - ,
  "maxLength": - ,
  "dictionary": - ,
  "searchTerm": - ,
  "relAdaDecisionTypes": - ,
  "relAdaConstrainedInOrganization": - ,
  "fixedValueList": - ,
  "nestedFields": [ - ]

Οπότε ορίστε η δική μου πρόταση ( την λογική σου δίνω - τα πεδία μπορεί να μην είναι απλές μεταβλητές, αλλά παράμετροι ή δε ξέρω τι.. καταλαβαίνεις.. ;) ):

Μια συνάρτηση για την βασική/σταθερή δομή του JSON ( λεξικού ) :

def fill_json_dynamically():
 
    a_uid = "Β.1.3"
    a_label = "ΑΝΑΛΗΨΗ ΥΠΟΧΡΕΩΣΗΣ"
    a_parent = None
    a_allowedInDecisions = True
 
    # Basic JSON dictionary :
    my_json = {}
 
    my_json['uid'] = a_uid
    my_json['label'] = a_label
    my_json['parent'] = a_parent
    my_json['allowedInDecisions'] = a_allowedInDecisions
    my_json['extraFields'] = [ ]
 
    return my_json



Μια συνάρτηση για τα «extraFields» :
 
def set_extra_fields():
 
    a_uid = "financialYear"
    a_label = "Οικονομικό Έτος"
    a_help = "Εισάγετε το Οικονομικό Έτος"
    a_type = "integer"
    a_validation = None
    a_required = True
    a_multiple = False
    a_maxLength = 4
    a_dictionary = None
    a_searchTerm = "textFinancialYear"
    a_relAdaDecisionTypes = None
    a_relAdaConstrainedInOrganization = None
    a_fixedValueList = None
    a_nestedFields = []
 
    json_extra_fields = {}
 
    json_extra_fields['uid']         = a_uid
    json_extra_fields['label']       = a_label
    json_extra_fields['help']        = a_help
    json_extra_fields['type']        = a_type
    json_extra_fields['validation']  = a_validation
    json_extra_fields['required']    = a_required
    json_extra_fields['multiple']    = a_multiple
    json_extra_fields['maxLength']   = a_maxLength
    json_extra_fields['dictionary']  = a_dictionary
    json_extra_fields['searchTerm']  = a_searchTerm
    json_extra_fields['relAdaDecisionTypes']                 = a_relAdaDecisionTypes
    json_extra_fields['relAdaConstrainedInOrganization']     = a_relAdaConstrainedInOrganization
    json_extra_fields['fixedValueList']    = a_fixedValueList
    json_extra_fields['nestedFields']      = a_nestedFields
 
 
    return json_extra_fields


Και όλως μαζί ο κώδικας :

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
 
import json
 
 
def set_extra_fields():
 
    a_uid = "financialYear"
    a_label = "Οικονομικό Έτος"
    a_help = "Εισάγετε το Οικονομικό Έτος"
    a_type = "integer"
    a_validation = None
    a_required = True
    a_multiple = False
    a_maxLength = 4
    a_dictionary = None
    a_searchTerm = "textFinancialYear"
    a_relAdaDecisionTypes = None
    a_relAdaConstrainedInOrganization = None
    a_fixedValueList = None
    a_nestedFields = []
 
    json_extra_fields = {}
 
    json_extra_fields['uid']         = a_uid
    json_extra_fields['label']       = a_label
    json_extra_fields['help']        = a_help
    json_extra_fields['type']        = a_type
    json_extra_fields['validation']  = a_validation
    json_extra_fields['required']    = a_required
    json_extra_fields['multiple']    = a_multiple
    json_extra_fields['maxLength']   = a_maxLength
    json_extra_fields['dictionary']  = a_dictionary
    json_extra_fields['searchTerm']  = a_searchTerm
    json_extra_fields['relAdaDecisionTypes']                 = a_relAdaDecisionTypes
    json_extra_fields['relAdaConstrainedInOrganization']     = a_relAdaConstrainedInOrganization
    json_extra_fields['fixedValueList']    = a_fixedValueList
    json_extra_fields['nestedFields']      = a_nestedFields
 
 
    return json_extra_fields
 
 
 
 
def fill_json_dynamically():
 
    a_uid = "Β.1.3"
    a_label = "ΑΝΑΛΗΨΗ ΥΠΟΧΡΕΩΣΗΣ"
    a_parent = None
    a_allowedInDecisions = True
 
    # Basic JSON dictionary :
    my_json = {}
 
    my_json['uid'] = a_uid
    my_json['label'] = a_label
    my_json['parent'] = a_parent
    my_json['allowedInDecisions'] = a_allowedInDecisions
    my_json['extraFields'] = [ set_extra_fields() ]
 
    return my_json
 
 
 
 
def print_json(a_json):
 
    print(json.dumps(a_json, sort_keys=True, indent=4, ensure_ascii=False))
 
 
 
 
if __name__ == '__main__':
 
    json_dict = fill_json_dynamically()
 
    print_json(json_dict)


Μπορείς να ακολουθήσει παρόμοια λογική και στα πεδία «nestedFields» & «fixedValueList» ;)
Αν χρειαστείς όμως το οτιδήποτε, το ξανά συζητάμε. :)

Ωραίος που ασχολείσαι με την Διαύγεια! Μπράβο!
Είναι στα πλαίσια κάποιου έργου που έχεις αναλάβει ;
Ομάδα Ελληνικής - Μακροχρόνιας υποστήριξη.

Greek - Long Term Support Team.

Επισκεφθείτε μας εδώ : g-lts.info
Τελευταία διόρθωση: 1 Μήνας 2 Εβδομάδες πριν από Tassos. Αιτία: Προσθήκη περισσότερων επεξηγήσεων.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.
Συντονιστές: pmav99
Χρόνος δημιουργίας σελίδας: 0.585 δευτερόλεπτα

Μοιράσου το!

Powered by CoalaWeb

Λίστα Ταχυδρομείου