JSON स्ट्रिंग को शब्दकोश सूची में परिवर्तित करना


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 फाइल का उदाहरण दिखा सकते हैं?
मैक

मैं का उपयोग करने की कोशिश कर रहा हूँ 'datapoints' कुंजी graphite.sdsc.edu:8443/render/...
lawchit

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] करने की कोशिश की, लेकिन मुझे जो भी मिला है, वह दोनों तत्वों के साथ पहला डेटापॉइंट है, क्योंकि पहले 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

,NumPy की सरणियों के लिए स्लाइसिंग सिंटैक्स के साथ ऑपरेटर का उपयोग करना व्यवहार है जिसे आप मूल रूप से सूची स्लाइस के साथ उम्मीद कर रहे थे।


इसके लिए शुक्रिया! मेरे पास एक और सवाल है अगर कोई भी काट सकता है: मैं इन डेटापॉइंट्स में पहले तत्वों का औसत लेने की कोशिश कर रहा हूं (यानी डेटापॉइंट्स [0] [0])। बस उन्हें सूचीबद्ध करने के लिए, मैंने [०: ५] [०] डेटापॉइंट्स करने की कोशिश की, लेकिन मुझे जो भी मिला, वह दोनों तत्वों के साथ पहला डेटापॉइंट है, क्योंकि पहले ५ डैटापॉइंट्स को केवल पहले तत्व से युक्त करने की इच्छा के विपरीत। क्या इसे करने का कोई तरीका है?
२०:३०

2
@lawchit - मेरा अद्यतन उत्तर देखें। यदि आप इस डेटा के साथ गणित कर रहे हैं तो मैं अत्यधिक NumPy का उपयोग करने की सलाह दूंगा।
दाऊवेन

यह एक और 100 अंक का हकदार है :-) मैं 1 पूर्ण दिन के लिए इस समाधान की तलाश में रहा हूं
मामून

16

यहां एक सरल स्निपेट है जो jsonएक शब्दकोश से एक पाठ फ़ाइल में पढ़ा जाता है । ध्यान दें कि आपकी json फ़ाइल को json मानक का पालन करना होगा, इसलिए इसमें "दोहरे उद्धरण चिह्नों के बजाय 'एकल उद्धरण का होना चाहिए।

आपकी JSON डंप .xt फाइल:

{"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>])

क्या 'ओपन' कमांड इस मामले में स्वतः ही json फाइल को बंद कर देता है? मैंने देखा है कि आप एक संदर्भ प्रबंधक का उपयोग नहीं कर रहे हैं।
मूंदड़ा

1
@ मोहोन्द्रा यू को फाइलों को बंद करने के लिए ()
संपत कुमार

2
@Moondra आप with()फ़ाइल को खोलने और बंद करने के बजाय ऑपरेटर का उपयोग कर सकते हैं । साइट से with open("welcome.txt") as file: देखें: देखें: pythonforbeginners.com/files/with-statement-in-python
Aceofspadez4444

0

मैं REST API के लिए पायथन कोड के साथ काम कर रहा हूं, इसलिए यह उन लोगों के लिए है जो समान परियोजनाओं पर काम कर रहे हैं।

मैं एक POST अनुरोध का उपयोग करके URL से डेटा निकालता हूं और कच्चा आउटपुट JSON है। किसी कारण से आउटपुट पहले से ही एक शब्दकोश है, एक सूची नहीं है, और मैं इस तरह से नेस्टेड शब्दकोश कुंजी को संदर्भित करने में सक्षम हूं:

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

जहाँ datapoint_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);
              }
            }
          }

django के विचार

    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
क्या यह सवाल का जवाब है?
सायनग तेय गोह
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.