2016-08-16 7 views
0

Dies ist eine Frage PARSE REST API. Ich muss ein JSON senden, um den Parse-Server mithilfe der Parse-REST-API abzufragen. Der JSON muss zwei Schlüssel mit dem gleichen Namen "$ oder" enthalten. Der erste Schlüssel/Wert wird ignoriert und der zweite Schlüssel/Wert wird vom Server verwendet. Ich weiß, dass Wörterbücher nicht zwei Schlüssel mit demselben Namen haben können. Ich habe ein wenig Zeit damit verbracht, die Dokumentation zu betrachten, aber es ist unklar, wie viel $ oder kann getan werden. Gibt es einen Weg dazu?

import json,httplib,urllib 
    connection = httplib.HTTPSConnection('api.parse.com', 443) 
    params = urllib.urlencode({"where":json.dumps({ 
      "gender": "male", 
      "$or": [ 
      { 
       "brand": "nike" 
      }, 
      { 
       "brand": "adidas" 
      } 
      ], 
      "$or": [ 
      { 
       "prim_color": "red" 
      }, 
      { 
       "prim_color": "blue" 
      } 
      ] 
     })}) 
    connection.connect() 
    connection.request('GET', '/1/classes/My_Class?%s' % params, '', { 
      "X-Parse-Application-Id": "API-ID", 
      "X-Parse-REST-API-Key": "REST-KEY" 
     }) 
    result = json.loads(connection.getresponse().read()) 
    print result 
+1

Wenn der erste Wert ignoriert wird, tun Sie es wirklich schicken müssen? –

+0

Ja, beide Werte sind notwendig. Der erste Schlüsselwert fragt das Markenfeld in der Datenbank ab. Der zweite Schlüsselwert fragt das Farbfeld ab. Die Anwendungslogik benötigt die Ergebnisse aus beiden Feldern. – gobob

+0

Wahrscheinlicher, dass Sie ihre API missverstehen und dies nicht wirklich benötigen. –

Antwort

2

Wie in der doc gezeigt, $or ein Array mit einem oder mehreren Bedingungen akzeptieren, um gegebenenfalls zu erfüllen:

import json,httplib,urllib 
connection = httplib.HTTPSConnection('api.parse.com', 443) 
params = urllib.urlencode({"where":json.dumps({ 
     "gender": "male", 
     "$or": [ 
     { 
      "brand": "nike" 
     }, 
     { 
      "brand": "adidas" 
     }, 
     { 
      "prim_color": "red" 
     }, 
     { 
      "prim_color": "blue" 
     } 
     ] 
    })}) 
connection.connect() 
connection.request('GET', '/1/classes/Player?%s' % params, '', { 
     "X-Parse-Application-Id": "${APPLICATION_ID}", 
     "X-Parse-REST-API-Key": "${REST_API_KEY}" 
    }) 
result = json.loads(connection.getresponse().read()) 
print result 

Edit: Ok, Sie zumindest haben wollen eine Marke/Farbe aus Ihren Listen.
Leider ist ihr Parser ziemlich schlecht und Sie können keine komplexe Abfrage durchführen (In Ihrem Fall sogar eine $and mit $or im Inneren tun ...). Wo können Operatoren nicht in andere eingebettet werden (und bisher ist nur $or implementiert).

Auf jeden Fall können Sie $in verwenden als $or Zustand zu verwenden ...

import json,httplib,urllib 
connection = httplib.HTTPSConnection('api.parse.com', 443) 
params = urllib.urlencode({"where":json.dumps({ 
     "gender": "male", 
     "brand": { "$in": ["nike", "adidas"] } 
     "prim_color": { "$in": ["red", "blue"] } 
    })}) 
connection.connect() 
connection.request('GET', '/1/classes/Player?%s' % params, '', { 
     "X-Parse-Application-Id": "${APPLICATION_ID}", 
     "X-Parse-REST-API-Key": "${REST_API_KEY}" 
    }) 
result = json.loads(connection.getresponse().read()) 
print result 
+0

Ich bin mir bewusst, dass $ oder kann ein Array nehmen. Ich verwende $ oder mit einem Array im obigen Code. Die Frage ist, wie ich zwei verschiedene Felder mit $ oder abfragen kann. – gobob

+0

Lass mich das versuchen, danke. – gobob

+0

Leider funktioniert das nicht als Marke! = Nike oder adidas werden in den Ergebnissen angezeigt. Was ich machen will, ist (Marken = Nike oder adidas und Farbe = rot oder blau) – gobob

Verwandte Themen