J'essaie de transmettre un fichier JSON et de convertir les données en dictionnaire.
Jusqu'ici, voici ce que j'ai fait:
import json
json1_file = open('json1')
json1_str = json1_file.read()
json1_data = json.loads(json1_str)
Je m'attends à ce que json1_data
soit un type dict
mais il apparaît en réalité sous la forme d'un type list
lorsque je le vérifie avec type(json1_data)
.
Qu'est-ce que je rate? J'ai besoin que ce soit un dictionnaire pour pouvoir accéder à l'une des clés.
Votre JSON est un tableau avec un seul objet à l'intérieur. Ainsi, lorsque vous le lisez, vous obtenez une liste avec un dictionnaire. Vous pouvez accéder à votre dictionnaire en accédant à l'élément 0 de la liste, comme indiqué ci-dessous:
json1_data = json.loads(json1_str)[0]
Vous pouvez maintenant accéder aux données stockées dans points de données exactement comme vous le souhaitiez:
datapoints = json1_data['datapoints']
J'ai encore une question si quelqu'un peut mordre: j'essaie de prendre la moyenne des premiers éléments de ces points de données (c'est-à-dire points de données [0] [0]). Juste pour les lister, j’ai essayé de faire des points de données [0: 5] [0] mais tout ce que j’obtiens, c’est le premier point de données avec les deux éléments, au lieu de vouloir obtenir les 5 premiers points de données ne contenant que le premier élément. Y a-t-il un moyen de faire cela?
datapoints[0:5][0]
ne fait pas ce que vous attendez. datapoints[0:5]
renvoie une nouvelle tranche de liste contenant uniquement les 5 premiers éléments, puis l'ajout de [0]
à la fin de celui-ci ne prend que le premier élément de la tranche de liste résultante. . Ce que vous devez utiliser pour obtenir le résultat souhaité est un compréhension de la liste :
[p[0] for p in datapoints[0:5]]
Voici un moyen simple de calculer la moyenne:
sum(p[0] for p in datapoints[0:5])/5. # Result is 35.8
Si vous êtes prêt à installer NumPy , c'est encore plus simple:
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
L'utilisation de l'opérateur ,
avec la syntaxe de découpage pour les matrices de NumPy a le comportement que vous attendiez à l'origine avec les tranches de liste.
Voici un extrait de code qui lit dans un fichier texte json
à partir d'un dictionnaire. Notez que votre fichier json doit respecter le standard json, il doit donc avoir "
guillemets doubles plutôt que '
guillemets simples.
Votre fichier JSON dump.txt:
{"test":"1", "test2":123}
Script Python:
import json
with open('/your/path/to/a/dict/dump.txt') as handle:
dictdump = json.loads(handle.read())
Vous pouvez utiliser les éléments suivants:
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"])
La meilleure façon de charger les données JSON dans le dictionnaire est d'utiliser le chargeur json intégré.
Voici l'extrait de code pouvant être utilisé.
import json
f = open("data.json")
data = json.load(f))
f.close()
type(data)
print(data[<keyFromTheJsonFile>])
transmettre les données en utilisant javascript ajax à partir des méthodes get
**//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);
}
}
}
Vues 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.")**