Я использую PHP, чтобы вернуть JSON-кодированный ассоциативный массив клиенту. Массив создается путем циклического прохождения набора результатов запроса к базе данных MySQL. Для простоты, вместо того, чтобы показывать весь код, который возвращает набор результатов, скажем, что один возможный вывод в запрос производит следующий ассоциативный массив в PHP:
$ResultRows = array(
"10 m" => 10,
"100 m" => 100,
"1000 m" => 1000
);
echo json_encode($ResultRows);
Строка JSON, созданная json_encode, выглядит следующим образом:
{"10 m":10,"100 m":100,"1000 m":1000}
Как видите, он кодируется как объект, а каждая пара ключ-значение выглядит как имя и значение свойства.
Теперь клиент под управлением Java получает эту строку в кодировке JSON. Я хотел бы создать экземпляр LinkedHashMap<String, Double>
который заполняется этими ценностями. Однако, поскольку он не закодирован как массив, мне трудно понять, как использовать GSON для его декодирования. Есть идеи?
Я мог бы просто изменить PHP и создать простой объект, который содержит пары ключ / значение и вернуть обычный массив этих объектов, но я надеялся оставить сценарии PHP в одиночку, если это возможно, потому что их довольно много для изменения.
Вы можете предоставить тип для fromJson
метод с TypeToken
класс, так что это будет что-то вроде этого:
public class Test {
public static void main(String[] args) {
String json ="{\"10 m\":10,\"100 m\":100,\"1000 m\":1000}";
LinkedHashMap<String, Double> map = new Gson().fromJson(json, new TypeToken<LinkedHashMap<String, Double>>(){}.getType());
System.out.println(map);
}
}
Какой выход:
{10 m=10.0, 100 m=100.0, 1000 m=1000.0}
Других решений пока нет …