无法获得 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");
我正在使用 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");