Перенос ассоциативного массива PHP в Java Map & lt; String, Double & gt; используя JSON (GSON)

Я использую 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 в одиночку, если это возможно, потому что их довольно много для изменения.

1

Решение

Вы можете предоставить тип для 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}
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]