无法获得 JSON 值

Unable to get JSON value

我正在使用 Algolia 搜索我的 android 项目。我正在使用以下代码进行搜索。

 @Override
public boolean onQueryTextChange(String newText) {
    Index index = client.getIndex("products");
    Query query = new Query(newText)
            .setAttributesToRetrieve("productName")
            .setHitsPerPage(50);
    index.searchAsync(query, new CompletionHandler() {
        @Override
        public void requestCompleted(JSONObject content, AlgoliaException error) {
            try {
                JSONArray hits=content.getJSONArray("hits");
                for(int i=0;i<hits.length();i++){

                    JSONObject jsonObject = hits.getJSONObject(i);
                    Log.i("son Value",jsonObject.getString("productColour"));



                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    });
    return false;
}

在日志中我得到 NULL 结果。但是当我将 JSON 对象转换为字符串并记录它时,我得到了完整的 JSON

{"productName":"Jenm shirt","objectID":"3126330","_highlightResult":{"productColour":{"value":"White","matchLevel":"none","matchedWords":[]},"sizeMap":{"value":"32,34,36,38","matchLevel":"none","matchedWords":[]},"thumb":{"value":"https:\/\/firebasestorage.googleapis.com\/v0\/b\/persona-37f96.appspot.com\/o\/post_images%2F7a1107be-fbfe-4009-9ec7-b3f246d09c2b.<em>j<\/em>pg?alt=media&token=e148a261-8a79-4a6e-a4c1-182c3c1930e4","matchLevel":"full","fullyHighlighted":false,"matchedWords":["j"]},"salePrice":{"value":"1120","matchLevel":"none","matchedWords":[]},"image_url":{"value":"https:\/\/firebasestorage.googleapis.com\/v0\/b\/persona-37f96.appspot.com\/o\/post_images%2F53b512ba-45e7-4f18-968f-4b4341c35668.<em>j<\/em>pg?alt=media&token=902f6aa5-baba-4911-9297-a054671bc86e","matchLevel":"full","fullyHighlighted":false,"matchedWords":["j"]},"productBrand":{"value":"<em>J<\/em>enm","matchLevel":"full","fullyHighlighted":false,"matchedWords":["j"]},"sizeStock":{"value":"6,7,8, 7","matchLevel":"none","matchedWords":[]},"mrp":{"value":"2288","matchLevel":"none","matchedWords":[]},"productMat":{"value":"Cotton","matchLevel":"none","matchedWords":[]},"productName":{"value":"<em>J<\/em>enm shirt","matchLevel":"full","fullyHighlighted":false,"matchedWords":["j"]},"user_id":{"value":"FK7IvpOvnnO8dMjYlhN2dBX0Lo43","matchLevel":"none","matchedWords":[]},"cato1":{"value":"Men","matchLevel":"none","matchedWords":[]},"cato2":{"value":"Casual Shirts","matchLevel":"none","matchedWords":[]},"keyword":{"value":"New arrival ","matchLevel":"none","matchedWords":[]},"productPattern":{"value":"Plain","matchLevel":"none","matchedWords":[]}}}

谁能解决这个问题?

如果您打开完整的 JSON 字符串,您会看到 productColour_highlightResult 的子项,而不是 hits 的子项,正如您的代码片段所建议的那样:

{  
   "productName":"Jenm shirt",
   "objectID":"3126330",
   "_highlightResult":{  
      "productColour":{  
         "value":"White",
         "matchLevel":"none",
         "matchedWords":[  

         ]
      },
...

productColour 是 Json 对象而不是字符串。

"productColour": {
  "value": "White",
  "matchLevel": "none",
  "matchedWords": []
}

你不能这样jsonObject.getString("productColour")。如果你想访问匹配级别,你可以这样做

jsonObject.getString("productColour")
JSONObject _highlightResult = jsonObject.getJSONObject("highlightResult");
JSONObject productColour = jsonObject.getJSONObject("productColour");
String matchLevel = productColour.getString("matchLevel");