জেএসএন স্ট্রিংকে অভিধান নয় তালিকায় রূপান্তর করা হচ্ছে


215

আমি একটি JSON ফাইলে পাস করার চেষ্টা করছি এবং ডেটাটিকে অভিধানে রূপান্তর করব।

এখনও পর্যন্ত, আমি এটিই করেছি:

import json
json1_file = open('json1')
json1_str = json1_file.read()
json1_data = json.loads(json1_str)

আমি টাইপ json1_dataহওয়ার প্রত্যাশা করছি dictতবে listআমি এটি যাচাই করে নিলে আসলে এটি টাইপ হিসাবে প্রকাশিত হয় type(json1_data)

আমি কী মিস করছি? আমার এটি অভিধান হতে হবে তাই আমি কীগুলির মধ্যে একটিতে অ্যাক্সেস করতে পারি।


3
আপনি আমাদের JSON ফাইলের একটি উদাহরণ আমাদের দেখাতে পারেন?
ম্যাক

আমি 'ডেটাপয়েন্টস' কী গ্রাফাইট.সডএসসিএস.ইডু
8443

4
আপনার বেস আইটেম একটি তালিকা। চেষ্টা json1_data[0]['datapoints']
gddc

অনুমানের ভিত্তিতে আমি বলব যে আপনার জসন একটি অভিধান নয় একটি তালিকা
জোড়ান বিসলে

1
আমাদের প্রশিক্ষক আমাদের যা দেখিয়েছিলেন সেখান থেকে যখন তিনি টাইপ করেছেন (json1_data) তখন তিনি 'ডিক' টাইপ হিসাবে এসেছিলেন। সবাইকে সাহায্য করার জন্য আপনাকে ধন্যবাদ!
Lawchit

উত্তর:


277

আপনার JSON হ'ল ভিতরে একটি একক বস্তু সহ একটি অ্যারে, সুতরাং আপনি যখন এটি পড়েন তখন আপনি ভিতরে একটি অভিধান সহ একটি তালিকা পান। নীচে দেখানো হিসাবে আপনি তালিকায় 0 আইটেমটি অ্যাক্সেস করে আপনার অভিধানটি অ্যাক্সেস করতে পারেন:

json1_data = json.loads(json1_str)[0]

আপনি এখন যেমনটি প্রত্যাশা করেছিলেন ঠিক তেমন ডেটাপয়েন্টগুলিতে সঞ্চিত ডেটা অ্যাক্সেস করতে পারবেন :

datapoints = json1_data['datapoints']

আমার কাছে আরও একটি প্রশ্ন আছে যদি কেউ কামড় দিতে পারে: আমি এই ডেটাপয়েন্টগুলিতে প্রথম উপাদানগুলির গড় (যেমন ডেটাপয়েন্টস [0] [0]) নেওয়ার চেষ্টা করছি। কেবল তাদের তালিকাভুক্ত করার জন্য, আমি ডেটাপয়েন্টগুলি করার চেষ্টা করেছি [0: 5] [0] তবে আমি যা পাই তা হ'ল উভয় উপাদানগুলির সাথে প্রথম ডেটাপয়েন্ট only কেবল প্রথম উপাদান যুক্ত প্রথম 5 ডেটাপয়েন্ট পেতে চাওয়ার বিপরীতে। এই কাজ করতে একটি উপায় আছে কি?

datapoints[0:5][0]আপনি যা আশা করছেন তা করে না datapoints[0:5]মাত্র প্রথম 5 টি উপাদান যুক্ত একটি নতুন তালিকা স্লাইস প্রদান [0]করে এবং এর শেষে যুক্ত করা হলে ফলাফলের তালিকার স্লাইস থেকে কেবল প্রথম উপাদানটি গ্রহণ করা হবে । ফলাফলটি পেতে আপনার যা ব্যবহার করতে হবে তা হ'ল একটি তালিকা বোধগম্যতা :

[p[0] for p in datapoints[0:5]]

গড় গণনা করার জন্য এখানে একটি সহজ উপায়:

sum(p[0] for p in datapoints[0:5])/5. # Result is 35.8

আপনি যদি NumPy ইনস্টল করতে ইচ্ছুক হন তবে এটি আরও সহজ:

import numpy
json1_file = open('json1')
json1_str = json1_file.read()
json1_data = json.loads(json1_str)[0]
datapoints = numpy.array(json1_data['datapoints'])
avg = datapoints[0:5,0].mean()
# avg is now 35.8

,নুমপির অ্যারেগুলির জন্য স্লাইসিং সিনট্যাক্স সহ অপারেটরটি ব্যবহার করার সাথে তালিকার টুকরোগুলির সাথে আপনি যে আচরণটি প্রত্যাশা করেছিলেন তা আসল।


এই জন্য আপনাকে ধন্যবাদ! যদি কেউ কামড় দিতে পারে তবে আমার আরও একটি প্রশ্ন রয়েছে: আমি এই ডেটাপয়েন্টগুলিতে প্রথম উপাদানগুলির গড় (যেমন ডেটাপয়েন্টস [0] [0]) নেওয়ার চেষ্টা করছি। কেবল তাদের তালিকাভুক্ত করার জন্য, আমি ডেটাপয়েন্টগুলি করার চেষ্টা করেছি [0: 5] [0] তবে আমি যা পাই তা হ'ল উভয় উপাদানগুলির সাথে প্রথম ডেটাপয়েন্ট oint কেবল প্রথম উপাদান যুক্ত প্রথম 5 ডেটাপয়েন্ট পেতে চাওয়ার বিপরীতে। এই কাজ করতে একটি উপায় আছে কি?
Lawchit

2
@ ললাচিট - আমার আপডেট হওয়া উত্তরটি দেখুন। আপনি যদি এই ডেটাটি দিয়ে গণিত করতে যাচ্ছেন তবে আমি নুমপি ব্যবহারের পরামর্শ দেব।
দাওওয়েেন

এটি একটি আরও 100 পয়েন্টের দাবিদার :-) আমি 1 পুরো দিনের জন্য এই সমাধানটির সন্ধান করছি
মামুন

16

এখানে একটি সাধারণ স্নিপেট যা jsonঅভিধান থেকে কোনও পাঠ্য ফাইলে পড়ে। মনে রাখবেন যে আপনার জসন ফাইলটি অবশ্যই জসন স্ট্যান্ডার্ড অনুসরণ করবে, সুতরাং এতে "ডাবল কোট থাকতে হবে তারপরে 'একক উদ্ধৃতি থাকতে হবে।

আপনার JSON dump.txt ফাইল:

{"test":"1", "test2":123}

পাইথন স্ক্রিপ্ট:

import json
with open('/your/path/to/a/dict/dump.txt') as handle:
    dictdump = json.loads(handle.read())

8

আপনি নিম্নলিখিত ব্যবহার করতে পারেন:

import json

 with open('<yourFile>.json', 'r') as JSON:
       json_dict = json.load(JSON)

 # Now you can use it like dictionary
 # For example:

 print(json_dict["username"])

3

অভিধানে JSON ডেটা লোড করার সর্বোত্তম উপায় হ'ল আপনি ইনবিল্ট জেসন লোডারটি ব্যবহার করতে পারেন।

নীচে নমুনার স্নিপেট ব্যবহার করা যেতে পারে।

import json
f = open("data.json")
data = json.load(f))
f.close()
type(data)
print(data[<keyFromTheJsonFile>])

এই ক্ষেত্রে 'ওপেন' কমান্ড কী জন্সন ফাইলটি স্বয়ংক্রিয়ভাবে বন্ধ করে দেবে? আমি লক্ষ্য করেছি আপনি কোনও প্রসঙ্গ পরিচালক ব্যবহার করছেন না।
মুন্দ্রা

1
@Moondra ইউ ঘনিষ্ঠ () ব্যবহার করার জন্য ফাইল বন্ধ করতে হবে
Sampat কুমার

2
@ মুন্ড্রা আপনিও with()সাইটটি থেকে ফাইলটি খুলতে এবং বন্ধ করার পরিবর্তে অপারেটরটি ব্যবহার করতে পারেন : with open("welcome.txt") as file: দেখুন: পাইথনফোরবেজিয়ানারস
ফাইলস

0

আমি একটি REST এপিআই-এর জন্য পাইথন কোডের সাথে কাজ করছি, সুতরাং এটি তাদের জন্য যারা একই প্রকল্পে কাজ করছেন।

আমি কোনও পোষ্ট অনুরোধ ব্যবহার করে কোনও URL থেকে ডেটা বের করি এবং কাঁচা আউটপুটটি JSON। কোনও কারণে আউটপুটটি ইতিমধ্যে একটি অভিধান, একটি তালিকা নয় এবং আমি এখনই নীস্টযুক্ত অভিধান কীগুলি উল্লেখ করতে সক্ষম হচ্ছি:

datapoint_1 = json1_data['datapoints']['datapoint_1']

যেখানে ডেটাপয়েন্ট_1 ডেটাপয়েন্টস অভিধানের ভিতরে রয়েছে।


-1

পদ্ধতিগুলি থেকে জাভাস্ক্রিপ্ট আজাক্স ব্যবহার করে ডেটা পাস করুন

    **//javascript function    
    function addnewcustomer(){ 
    //This function run when button click
    //get the value from input box using getElementById
            var new_cust_name = document.getElementById("new_customer").value;
            var new_cust_cont = document.getElementById("new_contact_number").value;
            var new_cust_email = document.getElementById("new_email").value;
            var new_cust_gender = document.getElementById("new_gender").value;
            var new_cust_cityname = document.getElementById("new_cityname").value;
            var new_cust_pincode = document.getElementById("new_pincode").value;
            var new_cust_state = document.getElementById("new_state").value;
            var new_cust_contry = document.getElementById("new_contry").value;
    //create json or if we know python that is call dictionary.        
    var data = {"cust_name":new_cust_name, "cust_cont":new_cust_cont, "cust_email":new_cust_email, "cust_gender":new_cust_gender, "cust_cityname":new_cust_cityname, "cust_pincode":new_cust_pincode, "cust_state":new_cust_state, "cust_contry":new_cust_contry};
    //apply stringfy method on json
            data = JSON.stringify(data);
    //insert data into database using javascript ajax
            var send_data = new XMLHttpRequest();
            send_data.open("GET", "http://localhost:8000/invoice_system/addnewcustomer/?customerinfo="+data,true);
            send_data.send();

            send_data.onreadystatechange = function(){
              if(send_data.readyState==4 && send_data.status==200){
                alert(send_data.responseText);
              }
            }
          }

জ্যাঙ্গো ভিউ

    def addNewCustomer(request):
    #if method is get then condition is true and controller check the further line
        if request.method == "GET":
    #this line catch the json from the javascript ajax.
            cust_info = request.GET.get("customerinfo")
    #fill the value in variable which is coming from ajax.
    #it is a json so first we will get the value from using json.loads method.
    #cust_name is a key which is pass by javascript json. 
    #as we know json is a key value pair. the cust_name is a key which pass by javascript json
            cust_name = json.loads(cust_info)['cust_name']
            cust_cont = json.loads(cust_info)['cust_cont']
            cust_email = json.loads(cust_info)['cust_email']
            cust_gender = json.loads(cust_info)['cust_gender']
            cust_cityname = json.loads(cust_info)['cust_cityname']
            cust_pincode = json.loads(cust_info)['cust_pincode']
            cust_state = json.loads(cust_info)['cust_state']
            cust_contry = json.loads(cust_info)['cust_contry']
    #it print the value of cust_name variable on server
            print(cust_name)
            print(cust_cont)
            print(cust_email)
            print(cust_gender)
            print(cust_cityname)
            print(cust_pincode)
            print(cust_state)
            print(cust_contry)
            return HttpResponse("Yes I am reach here.")**

2
এটি কি প্রশ্নের উত্তর?
সায়নগ থাই গোহ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.