কোনও ফাইল থেকে জেএসএন পড়ছেন?


320

সরল চেহারা, সহজ বক্তব্যটি আমার মুখে কিছু ত্রুটি ফেলছে বলেই আমি কিছুটা মাথা ব্যথার কারণ হয়ে উঠছি।

আমার কাছে স্ট্রিংস.জসন নামে একটি জসন ফাইল রয়েছে:

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

আমি জেসন ফাইলটি পড়তে চাই, এখনকার জন্য। আমি এই বিবৃতিগুলি পেয়েছি যা আমি জানতে পেরেছি, কিন্তু এটি কার্যকর নয়:

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 স্ট্রিং স্বয়ংক্রিয়ভাবে ঠিক করব?


2
এইচএম ... আমি json.loads থেকে json.load এ পরিবর্তিত হয়েছি তবে আমি সেই সুন্দর চিত্রটি পেয়েছি।
আরআরসি

5
আহা, নতুন বার্তাটি সম্পূর্ণ আলাদা সমস্যা। সেক্ষেত্রে সেই ফাইলটিতে কিছু অবৈধ জসন রয়েছে। তার জন্য, আমি একটি জসন যাচাইকারীর মাধ্যমে ফাইলটি চালানোর পরামর্শ দেব ।
ubomb

3
বুঝেছি! ফাইলটি ইওএফ হারিয়েছে। ফাইলটি সঠিকভাবে শেষ হয়নি। আমি লক্ষ্য করব না এটি যদি আপনার ভাল সুপারিশ না হয়! ধন্যবাদ!
আরআরসি

1
ইউবম্ব, আপনি যদি পরিবর্তন করতে পারেন তবে তা আমাকে গ্রহণযোগ্য হিসাবে চিহ্নিত করার জন্য আমাকে উত্তর দিন। উন্মুক্ত হও! আমি এটি চিহ্নিত করব।
আরআরসি

আমাকে অবশ্যই বাইট পতাকা সহ ফাইলটি খুলতে হবে, তারপরে আমি json.load পদ্ধতি ব্যবহার করতে পারি, কেন? আমি পাই .6..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 লাইনটি একটি ক্যাপচারের সাথে মুড়ে রাখতে, কারণ অবৈধ জেএসওএন একটি স্ট্যাকট্রেস ত্রুটি বার্তা তৈরি করবে।


41

সমস্যাটি বিবৃতি সহ ব্যবহার করছে :

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

ফাইলটি ইতিমধ্যে ইতিমধ্যে বন্ধ হয়ে যাচ্ছে। json_data.close()আবার ফোন করার দরকার নেই ।


1
দয়া করে json_data.close () সরিয়ে দিন। উল্লিখিত হিসাবে, এটি নিখুঁতভাবে বলা হবে।
বনি ভার্গিজ

1
@ জংজুন: দয়া করে বোঝা 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)

সঙ্গে বিবৃতি স্বয়ংক্রিয়ভাবে খোলা ফাইল বর্ণনাকারী বন্ধ করুন।


স্ট্রিং জেএসওএন

import json
from pprint import pprint

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

3

এটি যোগ করার জন্য, আজ আপনি জন্ডন আমদানি করতে প্যান্ডাস ব্যবহার করতে সক্ষম হবেন:
https://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_json.html আপনি প্রাচ্যটির যত্ন সহকারে ব্যবহার করতে চাইতে পারেন প্যারামিটার।


আপনি উত্তর উদাহরণগুলির পাশাপাশি ইউআরএল যুক্ত করলে এই উত্তরটি আরও ভাল হবে ...
ডেভিড ম্যাককরি rie

1

আপনি JSON ফাইলটি পড়তে পান্ডাস লাইব্রেরি ব্যবহার করতে পারেন।

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

pd.read_json("strings.json").to_dict()
ডিক্ট

0

এটি আমার পক্ষে কাজ করে।

json.load () ফাইল অবজেক্ট গ্রহণ করে, JSON ডেটা পার্স করে, ডেটা দিয়ে পাইথন ডিকশনারি তৈরি করে এবং তা আপনাকে ফিরিয়ে দেয় it

মনে করুন 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'}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.