python منتديات - تحليل القيم من ملف JSON؟




بايثون شهادة (7)

إذا كنت في الثعبان 3 هنا هو كيف يمكنك القيام بذلك

{
  "connection1": {
    "DSN": "con1",
    "UID": "abc",
    "PWD": "1234",
    "connection_string_python":"test1"
  }
  ,
  "connection2": {
    "DSN": "con2",
    "UID": "def",
    "PWD": "1234"
  }
}

يجب أن يبدو الرمز على افتراض أن ملف connection.json يبدو كما هو موضح أعلاه

connection_file = open('connection.json', 'r')
conn_string = json.load(connection_file)
conn_string['connection1']['connection_string_python'])
connection_file.close()
>>>test1

لدي JSON في ملف:

{
    "maps": [
        {
            "id": "blabla",
            "iscategorical": "0"
        },
        {
            "id": "blabla",
            "iscategorical": "0"
        }
    ],
    "masks": [
        "id": "valore"
    ],
    "om_points": "value",
    "parameters": [
        "id": "valore"
    ]
}

كتبت هذا البرنامج النصي الذي يطبع كل نص json:

json_data=open(file_directory).read()

data = json.loads(json_data)
pprint(data)

كيف يمكنني تحليل الملف واستخراج القيم الفردية؟


جواب جستن بيل مفيد حقاً ، لكن إذا كنت تستخدم Python 3 ، فيجب قراءة JSON على النحو التالي:

with open('data.json', encoding='utf-8') as data_file:
    data = json.loads(data_file.read())

ملاحظة: استخدم json.loads بدلاً من json.load . في Python 3 ، تأخذ json.loads معلمة سلسلة. json.load يأخذ معلمة كائن مثل الملف. إرجاع data_file.read() كائن سلسلة.


   # Here you go with modified json file:
   # data.json file : 
    {
        "maps": [
            {
                "id": "blabla",
                "iscategorical": "0"
            },
            {
                "id": "blabla",
                "iscategorical": "0"
            }
        ],
        "masks": [{
            "id": "valore"
        }],
        "om_points": "value",
        "parameters": [{
            "id": "valore"
        }]
    }


   # You can call or print data on console by using below lines

    import json
    from pprint import pprint
    with open('data.json') as data_file:
        data_item = json.load(data_file)
    pprint(data_item)

    print(data_item['parameters'][0]['id'])

    #Output : 
    #pprint(data_item) output as :

    {'maps': [{'id': 'blabla', 'iscategorical': '0'},
              {'id': 'blabla', 'iscategorical': '0'}],
     'masks': [{'id': 'valore'}],
     'om_points': 'value',
     'parameters': [{'id': 'valore'}]}
    #print(data_item['parameters'][0]['id']) output as :
    valore

يجب أن تبدو data.json كالتالي:

{
 "maps":[
         {"id":"blabla","iscategorical":"0"},
         {"id":"blabla","iscategorical":"0"}
        ],
"masks":
         {"id":"valore"},
"om_points":"value",
"parameters":
         {"id":"valore"}
}

يجب أن يكون رمزك:

import json
from pprint import pprint

with open('data.json') as data_file:    
    data = json.load(data_file)
pprint(data)

لاحظ أن هذا لا يعمل إلا في Python 2.6 وما فوق ، لأنه يعتمد على with-statement . في Python 2.5 استخدم from __future__ import with_statement ، في Python <= 2.4 ، راجع إجابة Justin Peel ، والتي يستند إليها هذا الجواب.

يمكنك الآن أيضًا الوصول إلى قيم فردية مثل:

data["maps"][0]["id"]  # will return 'blabla'
data["masks"]["id"]    # will return 'valore'
data["om_points"]      # will return 'value'

أعتقد أن ما يقوله Ignacio هو أن ملف JSON الخاص بك غير صحيح. لديك [] متى يجب أن يكون لديك {} . [] للقوائم ، {} مخصصة للقواميس.

إليك كيفية ظهور ملف JSON ، ولن يتم تحميل ملف JSON لي:

{
    "maps": [
        {
            "id": "blabla",
            "iscategorical": "0"
        },
        {
            "id": "blabla",
            "iscategorical": "0"
        }
    ],
    "masks": {
        "id": "valore"
    },
    "om_points": "value",
    "parameters": {
        "id": "valore"
    }
}

ثم يمكنك استخدام الرمز الخاص بك:

import json
from pprint import pprint

data = json.load(open('data.json'))

pprint(data)

باستخدام البيانات ، يمكنك الآن أيضًا العثور على قيم مثل:

data["maps"][0]["id"]
data["masks"]["id"]
data["om_points"]

جرب ذلك واكتشف ما إذا كان يبدأ في المعنى.


data = []
with codecs.open('d:\output.txt','rU','utf-8') as f:
    for line in f:
       data.append(json.loads(line))

يبدو السؤال قديمًا بعض الشيء. ولكن اسمحوا لي أن أقترح وظيفة ، parseStr ، مما يجعل شيئا مشابها ، وهذا هو ، إرجاع عدد صحيح أو طفو وإذا كان لا يمكن تحويل سلسلة ASCII معينة إلى أي منها ، فإنه يعيدها دون مساس. قد يتم تعديل الكود بالطبع للقيام بما تريد فقط:

   >>> import string
   >>> parseStr = lambda x: x.isalpha() and x or x.isdigit() and \
   ...                      int(x) or x.isalnum() and x or \
   ...                      len(set(string.punctuation).intersection(x)) == 1 and \
   ...                      x.count('.') == 1 and float(x) or x
   >>> parseStr('123')
   123
   >>> parseStr('123.3')
   123.3
   >>> parseStr('3HC1')
   '3HC1'
   >>> parseStr('12.e5')
   1200000.0
   >>> parseStr('12$5')
   '12$5'
   >>> parseStr('12.2.2')
   '12.2.2'






python json parsing