【问题标题】:I'm getting a JSON Decode error after successfully updating a resource成功更新资源后出现 JSON 解码错误
【发布时间】:2020-07-27 14:36:04
【问题描述】:

在 azure 门户上更新索引架构后,我得到以下信息。

/updateIndex/ 处的 JSONDecodeError

架构已成功更新,但我收到此错误以及 500 状态代码。

这是我的功能

@csrf_exempt
def updateIndex(request):
    
    url = 'https://search-test.search.windows.net/indexes/hotels-quickstar11t?api-version=2020-06-30'
    index_schema = {
        "name": "hotels-quickstar11t",  
        "fields": [
            {"name": "HotelId", "type": "Edm.String", "key": "true", "filterable": "true"},
            {"name": "HotelName", "type": "Edm.String", "searchable": "true", "filterable": "false", "sortable": "true", "facetable": "false"},
            {"name": "Description", "type": "Edm.String", "searchable": "true", "filterable": "false", "sortable": "false", "facetable": "false", "analyzer": "en.lucene"},
            {"name": "Description_fr", "type": "Edm.String", "searchable": "true", "filterable": "false", "sortable": "false", "facetable": "false", "analyzer": "fr.lucene"},
            {"name": "Category", "type": "Edm.String", "searchable": "true", "filterable": "true", "sortable": "true", "facetable": "true"},
            {"name": "Tags", "type": "Collection(Edm.String)", "searchable": "true", "filterable": "true", "sortable": "false", "facetable": "true"},
            {"name": "ParkingIncluded", "type": "Edm.Boolean", "filterable": "true", "sortable": "true", "facetable": "true"},
            {"name": "LastRenovationDate", "type": "Edm.DateTimeOffset", "filterable": "true", "sortable": "true", "facetable": "true"},
            {"name": "Rating", "type": "Edm.Double", "filterable": "true", "sortable": "true", "facetable": "true"},
            {"name": "Address", "type": "Edm.ComplexType", 
                "fields": [
                    {"name": "StreetAddress", "type": "Edm.String", "filterable": "false", "sortable": "false", "facetable": "false", "searchable": "true"},
                    {"name": "City", "type": "Edm.String", "searchable": "true", "filterable": "true", "sortable": "true", "facetable": "true"},
                    {"name": "StateProvince", "type": "Edm.String", "searchable": "true", "filterable": "true", "sortable": "true", "facetable": "true"},
                    {"name": "PostalCode", "type": "Edm.String", "searchable": "true", "filterable": "true", "sortable": "true", "facetable": "true"},
                    {"name": "Country", "type": "Edm.String", "searchable": "true", "filterable": "true", "sortable": "true", "facetable": "true"}
                ]
            },
            {"name": "Price", "type": "Edm.Double", "filterable": "true", "sortable": "true", "facetable": "true"},
            {"name": "Cost", "type": "Edm.Double", "filterable": "true", "sortable": "true", "facetable": "true"},
            {"name": "CostTest", "type": "Edm.Double", "filterable": "true", "sortable": "true", "facetable": "true"}


        ]
    }
        
    headers = {'Content-Type': 'application/json', 'api-key': 'key'}

    response = requests.put(url, headers=headers, json=index_schema)
    index = response.json()

    return HttpResponse(response)

有什么想法吗?

【问题讨论】:

    标签: python json django azure


    【解决方案1】:

    基本上,问题在于您希望搜索服务返回 JSON 格式的响应,而默认情况下,更新索引时服务实际上不会返回任何内容。因此以下代码行抛出错误:

    index = response.json()
    

    如果您想要返回 JSON 响应,您需要将 Prefer 请求标头设置为 return=representation。当您这样做时,您应该会看到 JSON 响应返回。

    请更改以下代码行:

    headers = {'Content-Type': 'application/json', 'api-key': 'key'}
    

    headers = {'Content-Type': 'application/json', 'api-key': 'key', 'Prefer': 'return=representation'}
    

    你不应该得到这个错误。

    您可以在此处阅读更多信息:https://docs.microsoft.com/en-us/rest/api/searchservice/update-index#response

    【讨论】:

    • 完美,再次感谢您的帮助。你是一个救生员。
    • 很高兴能帮上忙?。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-11
    • 1970-01-01
    • 1970-01-01
    • 2015-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多