एक फाइल से JSON पढ़ना?


320

मुझे सिर्फ इसलिए थोड़ा सिरदर्द हो रहा है क्योंकि एक साधारण सी दिखने वाली, आसान सी बात मेरे चेहरे में कुछ खराबी ला रही है।

मेरे पास एक json फ़ाइल है जिसे strings.json कहा जाता है:

"strings": [{"-name": "city", "#text": "City"}, {"-name": "phone", "#text": "Phone"}, ...,
            {"-name": "address", "#text": "Address"}]

मैं json फ़ाइल पढ़ना चाहता हूं, अभी के लिए। मेरे पास ये कथन हैं जो मुझे पता चला, लेकिन यह काम नहीं कर रहा है:

import json
from pprint import pprint

with open('strings.json') as json_data:
    d = json.loads(json_data)
    json_data.close()
    pprint(d)

कंसोल पर प्रदर्शित त्रुटि यह थी:

Traceback (most recent call last):
  File "/home/.../android/values/manipulate_json.py", line 5, in <module>
    d = json.loads(json_data)
  File "/usr/lib/python2.7/json/__init__.py", line 326, in loads
    return _default_decoder.decode(s)
  File "/usr/lib/python2.7/json/decoder.py", line 366, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
TypeError: expected string or buffer
[Finished in 0.1s with exit code 1]

संपादित

से बदल दिया json.loadsगयाjson.load

और यह मिला:

Traceback (most recent call last):
  File "/home/.../android/values/manipulate_json.py", line 5, in <module>
    d = json.load(json_data)
  File "/usr/lib/python2.7/json/__init__.py", line 278, in load
    **kw)
  File "/usr/lib/python2.7/json/__init__.py", line 326, in loads
    return _default_decoder.decode(s)
  File "/usr/lib/python2.7/json/decoder.py", line 369, in decode
    raise ValueError(errmsg("Extra data", s, end, len(s)))
ValueError: Extra data: line 829 column 1 - line 829 column 2 (char 18476 - 18477)
[Finished in 0.1s with exit code 1]

6
क्या आप सुनिश्चित हैं कि फ़ाइल में JSON मान्य है?
विस्फोट



आपकी फ़ाइल एक अमान्य json प्रारूप है। इसे इसमें बदलें: {"strings": [{"-name": "city", "#text": "City"}, {"-name": "phone", "#text": "Phone"}, ..., {"-name": "address", "#text": "Address"}]}
krizex

जवाबों:


546

json.load()विधि (बिना "एस" "लोड" में) एक फ़ाइल को सीधे पढ़ सकते हैं:

import json

with open('strings.json') as f:
    d = json.load(f)
    print(d)

आप json.loads()विधि का उपयोग कर रहे थे , जिसका उपयोग केवल स्ट्रिंग तर्क के लिए किया जाता है ।

संपादित करें: नया संदेश एक पूरी तरह से अलग समस्या है। उस स्थिति में, उस फ़ाइल में कुछ अमान्य json है। उसके लिए, मैं एक फ़ाइल को चलाने का सुझाव दूंगा

उदाहरण के लिए json को ठीक करने के समाधान भी हैं I मैं स्वचालित रूप से एक अमान्य JSON स्ट्रिंग कैसे ठीक करूं?


2
hm ... मैं json.loads से json.load में बदल गया, लेकिन मुझे यह अच्छा संदेश मिला।
आरआरसी

5
आह, अच्छी तरह से नया संदेश एक पूरी तरह से अलग समस्या है। उस स्थिति में, उस फ़ाइल में कुछ अमान्य json है। उसके लिए, मैं एक फ़ाइल को चलाने का सुझाव दूंगा
ubub

3
समझ गया! फ़ाइल EOF अनुपलब्ध थी। फ़ाइल सही ढंग से समाप्त नहीं हुई थी। मुझे लगता है कि अगर यह आपकी अच्छी सिफारिश नहीं था नोटिस नहीं होगा! धन्यवाद!
आरआरसी

1
ubomb, यदि आप इसे स्वीकार करने के लिए मुझे जवाब देने के लिए बदल सकते हैं। मुक्त हो! मैं इसे चिन्हित करूंगा।
आरआरसी

मुझे बाइट ध्वज के साथ फ़ाइल खोलनी चाहिए, फिर मैं json.load विधि का उपयोग कर सकता हूं, क्यों? मुझे Py3.6 मिला
क्रग

113

यहाँ कोड की एक प्रति है जो मेरे लिए ठीक काम करती है

import json

with open("test.json") as json_file:
    json_data = json.load(json_file)
    print(json_data)

डेटा के साथ

{
    "a": [1,3,"asdf",true],
    "b": {
        "Hello": "world"
    }
}

आप अपने json.load लाइन को एक कोशिश के साथ लपेटना चाह सकते हैं क्योंकि अमान्य JSON एक स्टैट्रेस त्रुटि संदेश का कारण होगा।


41

समस्या बयान के साथ प्रयोग कर रही है:

with open('strings.json') as json_data:
    d = json.load(json_data)
    pprint(d)

फ़ाइल पहले से ही बंद होने वाली है। json_data.close()फिर से कॉल करने की आवश्यकता नहीं है ।


1
कृपया json_data.close () हटा दें। जैसा कि उल्लेख किया गया है, इसे अंतर्निहित रूप से कहा जाएगा।
बोनी वर्गीज

1
@Zongjun: कृपया json.load (json_data) पर लोड सही करें।
नाइट71

2
सुंदर प्रिंट करने के लिए, मुझे उपयोग करना था:print(json.dumps(d,sort_keys=True,indent=2))
माइक डी

25

अजगर 3 में, हम नीचे विधि का उपयोग कर सकते हैं।

फ़ाइल से पढ़ें और JSON में कनवर्ट करें

import json
from pprint import pprint

# Considering "json_list.json" is a json file

with open('json_list.json') as fd:
     json_data = json.load(fd)
     pprint(json_data)

स्टेटमेंट के साथ स्वचालित रूप से खोले गए फ़ाइल डिस्क्रिप्टर को बंद कर दें।


स्ट्रिंग JSON के लिए

import json
from pprint import pprint

json_data = json.loads('{"name" : "myName", "age":24}')
pprint(json_data)

3

इसे जोड़ने के लिए, आज आप json को आयात करने के लिए पांडा का उपयोग करने में सक्षम हैं:
https://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_json.html आप ओरिएंट का सावधानीपूर्वक उपयोग करना चाहते हैं। पैरामीटर।


यह उत्तर बेहतर होगा यदि आप कोड उदाहरणों के साथ-साथ url को भी जोड़ दें ...
डेविड मैककोररी

1

JSON फ़ाइल को पढ़ने के लिए आप पांडा लाइब्रेरी का उपयोग कर सकते हैं।

import pandas as pd
df = pd.read_json('strings.json',lines=True)
print(df)

0

यह मेरे लिए काम करता है।

json.load () फ़ाइल ऑब्जेक्ट को स्वीकार करता है, JSON डेटा को पार्स करता है, डेटा के साथ एक पायथन डिक्शनरी पॉप्युलेट करता है और इसे आपको वापस लौटाता है।

मान लीजिए कि JSON फाइल इस प्रकार है:

{
   "emp_details":[
                 {
                "emp_name":"John",
                "emp_emailId":"john@gmail.com"  
                  },
                {
                 "emp_name":"Aditya",
                 "emp_emailId":"adityatest@yahoo.com"
                }
              ] 
}

import json 

# Opening JSON file 
f = open('data.json',) 

# returns JSON object as  
# a dictionary 
data = json.load(f) 

# Iterating through the json 
# list 
for i in data['emp_details']: 
    print(i) 

# Closing file 
f.close()

#Output:
{'emp_name':'John','emp_emailId':'john@gmail.com'}
{'emp_name':'Aditya','emp_emailId':'adityatest@yahoo.com'}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.