У меня есть этот json, у которого есть «код продукта» внутри этого кода продукта, есть еще один jsonobject и строка.
Я хочу, чтобы при вводе «кода продукта» отображалось предлагаемое описание.
Я уже получаю отображение предлагаемого описания, когда ввожу код описания продукта, но кажется, что оно отображается неправильно.
Я имею в виду, что когда я набираю «код продукта» «BI», отображение предлагаемого описания выглядит следующим образом.
{"GNT": "GIANT", "TRL": "TREEK", "CNN": "CNDALE", "ST": "SANTA", "SCT": "SCOTT"}
вот мой json
{
"BI": {
"desc": {
"MBIK": "MOUNTAIN BIKE",
"FBIK": "FOLDING BIKE",
"EBIK": "E-BIKE",
"OTHER": "OTHER"
},
"brand": {
"GNT": "GIANT",
"TRL": "TREEK",
"CNN": "CNDALE",
"STC": "SANTA",
"SCT": "SCOTT"
},
"category": "BICYCLE & EBIKE STORE"
},
"CA": {
"desc": {
"CARA": "CAR AUDIO",
"CARS": "CAR SPEAKER",
"TIRE": "CAR TIRE",
"OTHER": "OTHER"
},
"brand": {
"AIC": "AICHI",
"BRI": "BRIGDESTONE",
"CON": "CONTINENTAL",
"DUN": "DUNLOP",
"FAL": "FALKEN GR"
}
"category": "CAR ACCESORIES"
},
and so on.. {
}
}
вот мой код для разбора моего json на мой фрагмент
private void loadLookupCategoryJson() {
mLookupProducts = new ArrayList<>();
mArrayStringLookupProduct = new ArrayList<>();
try {
JSONObject json = new JSONObject(loadLookupBrandJSON());
Iterator<String> keys = json.keys();
while(keys.hasNext()) {
String key = keys.next();
JSONObject obj = (JSONObject) json.get(key);
JSONObject brand = obj.getJSONObject(Keys.CATEGORY_BRAND);
JSONObject desc = obj.getJSONObject(Keys.CATEGORY_DESC);
String category = obj.getString(Keys.CATEGORY);
LookupProducts lookupProduct = new LookupProducts(key, brand, desc, category);
mLookupProducts.add(lookupProduct);
mArrayStringLookupProduct.add(String.valueOf(brand));
}
} catch (JSONException e) {
e.printStackTrace();
}
}
и вот мое, чтобы получить динамическое поле бренда
} else if (format.equalsIgnoreCase(Keys.AUTO_COMPLETE_FIELD)) {
addTextViews(title);
addAutoCompleteField(desc, inputType, title, mKeys.get(i), mArrayStringLookupProduct, maxLength, minLength);
}
Я ожидаю, что вывод должен быть таким
ВВОД ТЕКСТА: Т
РЕКОМЕНДУЕМЫЙ ДИСПЛЕЙ: ГИГАНТ ТРЕК САНТА СКОТТ
Отобразить все значения с помощью «T»
фактический результат
ВВОД ТЕКСТА: БИ
РЕКОМЕНДУЕМЫЙ ОТОБРАЖЕНИЕ: {"GNT": "GIANT", "TRL": "TREEK", "CNN": "CNDALE", "ST": "SANTA", "SCT": "SCOTT"}




Вы можете внести следующие изменения:
JSONObject brand = obj.getJSONObject(Keys.CATEGORY_BRAND);
JSONObject desc = obj.getJSONObject(Keys.CATEGORY_DESC);
String category = obj.getString(Keys.CATEGORY);
lookupProduct = new LookupProducts(key, brand, desc, category);
mLookupProducts.add(lookupProduct);
// iterate every brand key, fetch its value and add in arrayList
Iterator<String> brandKeys = brand.keys();
while(brandKeys.hasNext()) {
String bKey = brandKeys.next();
mArrayStringLookupProduct.add((String) brand.get(bKey));
}
я использовал библиотеку org.json.simple, в которой был метод values() для jsonObject, но логика осталась прежней. Вам нужны только ценности бренда. Перебрать ключи бренда jsonObject, получить его значения и сохранить в arrayList.
Я рад, что смог помочь.
Я получил ошибку со «значениями» в этом коде mArrayStringLookupProduct.addAll(brand.values());