两个具有相同名称的键" $或"

时间:2016-08-16 12:59:24

标签: python json parse-platform

这是一个PARSE REST API问题。我需要发送一些json来使用Parse REST API查询解析服务器。 json需要包含两个具有相同名称的键" $或"。忽略第一个键/值,服务器使用第二个键/值。我意识到词典不能有两个同名的键。我花了很多时间查看文档,但不清楚多个$或可以完成多少。有没有办法解决?

    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 个答案:

答案 0 :(得分:2)

doc所示,$or接受具有一个或多个条件的数组,以便可选择实现:

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

编辑: 好的,您希望列表中至少有一个品牌/颜色。
可悲的是,他们的解析器非常糟糕,你无法进行复杂的查询(在你的情况下甚至在$and里面进行$or ...)。其中的运算符无法嵌入到其他运算符中(到目前为止只实现了$or)。

无论如何,您可以使用$in作为$or条件...

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