Quiero verificar si "Code":"A" está disponible en el archivo json. Ya busqué en Internet y leí muchos QA en stackoverflow pero no me ayuda. ¿Alguien podría mostrarme cómo hacerlo?

with open(dummyJson_url):
    dataList = json.load(open(dummyJson_url))

test = json.loads("""{"Code":"A"}""")

racksLocation = dataList["Test"]

for i in range(len(racksLocation)):

    newLoc = dataList["Test"][i]

    if sorted(test.items()) in sorted(newLoc.items()):
        print("Yes")
        break

    else:
        print("No")

Y aquí está mi json:

{
    "Test": [
        {
            "Code":"A",
            "Buyer": []
        },
        {
            "Code":"B",
            "New": []
        },
        {
            "Code":"C",
            "Racks": []
        },
        {
            "Code":"D",
            "Baru": []
        }
    ]
}
0
Akhdan Rasiq 4 oct. 2019 a las 10:48

5 respuestas

La mejor respuesta

Hay un problema muy simple:

>>> print(sorted(test.items()))
[('Code', 'A')] #a list with 1 item(tuple) in it

>>> print(sorted(newLoc.items()))
[('Buyer', []), ('Code', 'A')] #a list with 2 tuples

Entonces cuando intentas esto:

if sorted(test.items()) in sorted(newLoc.items()):
   ...

¡la condición falla porque [('Code', 'A')] NO está en [('Buyer', []), ('Code', 'A')] pero ('Code', 'A') sí! (observe la falta de corchetes de lista aquí)

Todo lo que necesita hacer es acceder al primer (y único) elemento en [('Code', 'A')] (que es sorted(test.items())[0])

Esto es todo lo que necesita hacer usando solo su enfoque si prefiere seguir con él (lo que podría mejorar, pero no voy a entrar en eso):

with open(dummyJson_url):
    dataList = json.load(open(dummyJson_url))

test = json.loads("""{"Code":"A"}""")

racksLocation = dataList["Test"]

for i in range(len(racksLocation)):

    newLoc = dataList["Test"][i]

    if sorted(test.items())[0] in sorted(newLoc.items()): #you are now checking the first element inside the list
        print("Yes")
        break

    else:
        print("No")
1
Eb J 4 oct. 2019 a las 08:09

Cuando haces json.loads(json_string) te da un diccionario si obtienes, por ejemplo, json_data={"a":1} si lo haces json_data.get("a") te dará el valor 1 si está presente o None así que simplemente puedes revisar puede hacer una función resulable para esto

 def check_in_json(jsondata,key,value):
       for data in jsondata:
           if data.get(key) == value:
              return True
       return False

Y llámalo como

json_data={
    "Test": [
        {
            "Code":"A",
            "Buyer": []
        },
        {
            "Code":"B",
            "New": []
        },
        {
            "Code":"C",
            "Racks": []
        },
        {
            "Code":"D",
            "Baru": []
        }
    ]
}

check_in_json(json_data["Test"],"Code","A") #you will get True if found else false
0
Yugandhar Chaudhari 4 oct. 2019 a las 07:56

Siguiendo su enfoque, intente el siguiente código:

with open(dummyJson_url):
    dataList = json.load(open(dummyJson_url))

test = {"Code":"A"}

for data in dataList["Test"]:
    if test.items() <= data.items():   # In dict, .items() would give you the set type which can be compared.
        print("Yes")
        break
    else:
        print("No")

¡Espero que esto ayude!

0
Bharat Gera 4 oct. 2019 a las 08:08

Simplificó su código:

with open(dummyJson_url):
    dataList = json.load(open(dummyJson_url))

for item in datalist['Test']:
    if 'Code' in item and item['Code'] == "A":
        print 'yes'
        break
    else:
        print 'no'
0
Harsh Bafna 4 oct. 2019 a las 07:55

La clase JSONObject tiene un método llamado "has":

http://developer.android.com/reference/org/json/JSONObject.html#has(java.lang.String)

0
ZOB 4 oct. 2019 a las 08:29
58232036