2016-01-31 3 views
0

Учитывая, что строка запроса, содержащая простые типы (строка, дата), массивы и сложные объекты, как я могу легко создать репрезентацию JSON с помощью Java?Строка запроса Java для JSON

Например:

type=event&groups%5B%5D=a&groups%5B%5D=b&details%5Bclient_time%5D=Sat+Jan+30+2016+18%3A38%3A57+GMT-0500+(EST) 

должен производить:

{ type: 'event', groups: [ 'a', 'b' ], details: { client_time: 'Sat Jan 30 2016 18:38:57 GMT-0500 (EST)' } } 

Такая функциональность существует в рамках Node.js Экспресс (результат легко доступен в виде request.query).

+0

Эта строка преобразуется в это 'type = event & groups [] = a & groups [] = b & details [client_time] = Сб 30 января 2016 18:38:57 GMT-0500 (EST)' Это правильно? Потому что я думаю, что это должно быть: 'type% 3Devent% 26groups% 3D% 5B% 27a% 27% 2C% 27b% 27% 5D% 26 + details% 3Dclient_time% 3D% 27Sat + Jan + 30 + 2016 + 18 % 3A38% 3A57 + GMT-0500 +% 28EST% 29% 27 ' – Cripto

+0

Нет, правильная сериализация JSON этого значения представлена ​​в ответе после того, как« должен произвести: » – ghostrider00

+0

Я понимаю, что последовательная версия после правильной. Я спрашиваю, является ли исходная строка правильной. Потому что 'groups% 5B% 5D = a' приводит к' groups [] = a' ... – Cripto

ответ

0

Im все еще не уверен (в комментариях к вопросу), что исходная строка правильно отформатирована. Я думаю, что некоторые символы перемещаются, когда вы заменяете значения фиктивными данными. Я не думаю, что есть логический переход от исходной строки в строку сериализованного

Взгляни на этой

final String opString = "type=event&groups%5B%5D=a&groups%5B%5D=b&details%5Bclient_time%5D=Sat+Jan+30+2016+18%3A38%3A57+GMT-0500+(EST)"; 

System.out.println(URLDecoder.decode(opString, "UTF-8")); 

, который выводит

type=event&groups[]=a&groups[]=b&details[client_time]=Sat Jan 30 2016 18:38:57 GMT-0500 (EST) 

Где моя интерпретация вашей строки

final String myString = "type%3Devent%26groups%3D%5B%27a%27%2C%27b%27%5D%26details%5Bclient_time%5D=Sat+Jan+30+2016+18%3A38%3A57+GMT-0500+(EST)"; 
    System.out.println(URLDecoder.decode(myString, "UTF-8")); 

выход которого

type=event&groups=['a','b']&details[client_time]=Sat Jan 30 2016 18:38:57 GMT-0500 (EST) 

я могу логически работать с этим, чтобы произвести строку, которую вы хотите

final String myStringDecoded = URLDecoder.decode(myString, "UTF-8"); 

    System.out.println(myStringDecoded); 

    // Then we can break it down to its parts 
    // The & is used to operate values 
    String[] parts = myStringDecoded.split("&"); 


    JsonObject json = new JsonObject(); 

    for(String part: parts){ 
     String[] keyVal = part.split("="); // The equal separates key and values 
     json.addProperty(keyVal[0], keyVal[1]); 
    } 

    System.out.println(json); 

, что приводит к

{"type":"event","groups":"['a','b']","details[client_time]":"Sat Jan 30 2016 18:38:57 GMT-0500 (EST)"} 

я могу улучшить этот ответ, чтобы сделать это именно то, что вы хотите, если мой предположения верны

+0

Crito - спасибо за ваш ответ. Опять же, я не считаю, что пример строки запроса неверен или изменен. Используйте эту ссылку JsFiddle в качестве примера того, как этот объект VALID json преобразуется в указанную выше строку запроса: https://jsfiddle.net/z3akqmew/ Предполагая, что указанная выше строка запроса недействительна, можно предположить, что jQuery некорректно сериализуется JSON объекты в строки запроса. Это очень, очень, смелое требование. – ghostrider00

+0

Честно говоря, я не знаю, что сказать.'type = event & groups [] = a & groups [] = b & details [client_time] = Sat Jan 30 2016 18:38:57 GMT-0500 (EST)' не имеет логического смысла. Значит, я думаю, что что-то не так с этим lib возможно? Можете ли вы попробовать написать код, чтобы вернуть JSON в javascript? [Это] (https://jsfiddle.net/e8k5ytov/1/), что я получил при использовании только чистого javascript, который согласуется с тем, что у меня есть в моем ответе. – Cripto

Смежные вопросы