Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / JsonValue из строки / 24 сообщений из 24, страница 1 из 1
11.12.2018, 16:03
    #39746136
Владимир П.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JsonValue из строки
Нужно получить JsonValue (JSR-374) из строкового представления JSON. Ожидал, что есть простой способ (например, предназначенный для этого статический метод). Но, перерыв кучу интернета, так и не нашёл ничего, кроме многошагового способа c привлечением средств ввода-вывода:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
import java.io.StringReader;
import javax.json.Json;
import javax.json.JsonReader;
import javax.json.JsonValue;
...
JsonReader reader = Json.createReader(new StringReader( inputJsonString ));
JsonValue json = reader.readValue();
reader.close();



Неужели и правда в API не включили простого конвертера из строки в Json?
...
Рейтинг: 0 / 0
11.12.2018, 16:15
    #39746150
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JsonValue из строки
Владимир П.,

А что ты подразумеваешь под строкой? чем тебе просто строка с json-ом внутри не json ?
...
Рейтинг: 0 / 0
11.12.2018, 16:23
    #39746158
Владимир П.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JsonValue из строки
questionerА что ты подразумеваешь под строкой?
Переменную типа java.lang.String, конечно же.

questionerчем тебе просто строка с json-ом внутри не json?
Хочу JsonValue, чтобы воспользоваться всеми удобствами JSON Processing API.
...
Рейтинг: 0 / 0
12.12.2018, 07:06
    #39746396
Korcar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JsonValue из строки
Владимир П., строка с джейсоном уже готовая или ты её собираешь из каких-то данных?
...
Рейтинг: 0 / 0
12.12.2018, 07:48
    #39746416
Владимир П.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JsonValue из строки
Korcar,
Готовая, из внешнего источника. В данном случае поступает из БД, но в принципе источник этих строковых данных может быть любым.
...
Рейтинг: 0 / 0
12.12.2018, 08:09
    #39746419
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JsonValue из строки
Владимир П.,
Баловство твоя задумка.
...
Рейтинг: 0 / 0
12.12.2018, 09:12
    #39746430
Korcar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JsonValue из строки
Владимир П.Korcar,
Готовая, из внешнего источника. В данном случае поступает из БД, но в принципе источник этих строковых данных может быть любым.
как решишь, напиши. такая же проблема, но я джейсон собираю из объекта методом stringify, но не до конца работает
...
Рейтинг: 0 / 0
12.12.2018, 09:36
    #39746441
Владимир П.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JsonValue из строки
Petro123Баловство твоя задумка.
А каков правильный путь?
...
Рейтинг: 0 / 0
12.12.2018, 10:00
    #39746463
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JsonValue из строки
Владимир П.Petro123Баловство твоя задумка.
А каков правильный путь?вы задачу не озвучили.
...
Рейтинг: 0 / 0
12.12.2018, 10:51
    #39746504
Владимир П.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JsonValue из строки
Petro123вы задачу не озвучили.
Первое предложение первого сообщения этой темы.

Есть переменная типа String, содержащая текстовое представление данных в формате JSON. Требуется конвертированить её в значение типа JsonValue наиболее простым способом.

(куда уж конкретнее?)
...
Рейтинг: 0 / 0
12.12.2018, 11:03
    #39746512
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JsonValue из строки
Владимир П.,
Я поставил под сомнение постановку задачи вашего величества.
Куда уж конкретнее?
По логике нужна задача на ранг выше.
Программисты часто выдумывают задачи для себя любимых.
Тип зачем понадобился?
Нужно парсить - берем парсер. И т.д.
...
Рейтинг: 0 / 0
12.12.2018, 11:15
    #39746518
Лысый дядька
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JsonValue из строки
Владимир П.Но, перерыв кучу интернета, так и не нашёл ничего, кроме многошагового способа c привлечением средств ввода-вывода:

В интеренете просто куча решений для парсинга JSON. Или религия не позволяет выйти чуть за рамки стандартной библиотеки?
...
Рейтинг: 0 / 0
12.12.2018, 11:38
    #39746539
Korcar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JsonValue из строки
Лысый дядькаВладимир П.Но, перерыв кучу интернета, так и не нашёл ничего, кроме многошагового способа c привлечением средств ввода-вывода:

В интеренете просто куча решений для парсинга JSON. Или религия не позволяет выйти чуть за рамки стандартной библиотеки?
Дядь, а пообщаться?)

Может лучше исходник переделать сразу?
...
Рейтинг: 0 / 0
12.12.2018, 14:32
    #39746696
alex55555
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JsonValue из строки
Владимир П.Неужели и правда в API не включили простого конвертера из строки в Json?
API - это не детский сад. Там декларируются интерфейсы, а реализация оставляется внешним игрокам. Так если есть желание, можно обернуть streaming пример в другой класс и сделать конвертер строка-json в один метод. Но на то и гибкость в стандарте, что бы не навязывать именно один метод, потому что это не всегда удобно. А все эти "неужели" есть просто непонимание сути серьёзных API. Нужно видеть "в большом", тогда станет ясно.
...
Рейтинг: 0 / 0
12.12.2018, 22:14
    #39746980
Sergunka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JsonValue из строки
Вот кусок моего древнего кода - речь видимо об этом

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
	private SimulatorConfig getSimulatorConfig(String content)
			throws IOException, JsonParseException, JsonMappingException {
		ObjectMapper objectMapper = new ObjectMapper();

		SimulatorConfig config = new SimulatorConfig();
		JsonNode node = objectMapper.readValue(content, JsonNode.class);

		config.setName(node.get("name").asText());
		JsonNode format = node.get("format");
		if (format != null)
			config.setFormat(format.asText());
		config.setSchedule(node.get("schedule").asLong());
		config.setFrequency(node.get("frequency").asLong());

		JsonNode sensores = node.get("sensors");
		if (sensores != null) {
			List<SensorConfig> sensors = new ArrayList<SensorConfig>();
			for (int i = 0; i < sensores.size(); i++) {
				JsonNode sensore = sensores.get(i);
				SensorConfig sc = new SensorConfig();
				sc.setSensor(sensore.get("sensor").asText());
				if (sensore.get("method") != null) {
					sc.setMethod(sensore.get("method").asText());
					JsonNode x = sensore.get("x");
					JsonNode y = sensore.get("y");
					double xx[] = new double[x.size()];
					double yy[] = new double[x.size()];
					for (int j = 0; j < x.size(); j++) {
						xx[j] = x.get(j).asDouble();
						yy[j] = y.get(j).asDouble();
					}
					sc.setX(xx);
					sc.setY(yy);
				}
				sensors.add(sc);
			}
			config.setSensors(sensors);
		}
		
		if (node.get("attributes") != null) {
			Iterator<Entry<String, JsonNode>> nodes = node.get("attributes").getFields();
			if (nodes != null) {
				Map<String, String> atrrMap = new LinkedHashTreeMap<String, String>();
				while (nodes.hasNext()) {
					Map.Entry<String, JsonNode> entry = (Map.Entry<String, JsonNode>) nodes.next();
					System.out.println("key --> " + entry.getKey() + " value-->" + entry.getValue());
					atrrMap.put(entry.getKey(), entry.getValue().asText());
				}
				config.setAttributes(atrrMap);
			}
		}
		return config;
	}



На вход подается прмерно такой JSON

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
{
  "name": "SIM0_",
  "schedule":40,
  "frequency":1000,
  "start": false,
  "sensors":[{"sensor" : "Vibration",
               "method" : "spline",
               "x":[0.00, 10.0, 20.0, 30.0, 40.0],
               "y":[1.00, 2.0, 3.0, 2.0, 1.0]
              },
              {"sensor" : "Rotor_Speed",
               "method" : "spline",
               "x":[0.00, 10.0, 20.0, 30.0, 40.0],
               "y":[100.00, 200.0, 300.0, 200.0, 100.0]
              },
              {"sensor" : "Temperature",
               "method" : "line",
               "x":[0.00, 10.0, 20.0, 30.0, 40.0],
               "y":[10.00, 20.0, 30.0, 20.0, 10.0]
              }
    ]
}



Как строка.

Подробней для чего весь огрород можно здесь прочитать

https://vyatkins.wordpress.com/2016/07/30/velociraptor/
...
Рейтинг: 0 / 0
12.12.2018, 23:37
    #39747020
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JsonValue из строки
Sergunka,

Очень удобно
...
Рейтинг: 0 / 0
13.12.2018, 09:19
    #39747112
Sergunka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JsonValue из строки
questionerSergunka,

Очень удобно

 На самом деле более удобный это библиотека Гугла GSON

Вот хорошая заяснялка у Jenkov

http://tutorials.jenkov.com/java-json/gson.html

Parsing JSON Into Java Objects
GSON can pase JSON into Java objects using the fromJson() method of the Gson object. Here is an GSON example of parsing JSON into a Java object:

Код: java
1.
2.
3.
4.
5.
String json = "{\"brand\":\"Jeep\", \"doors\": 3}";

Gson gson = new Gson();

Car car = gson.fromJson(json, Car.class);


The first line of the example defines the JSON string to parse. The second line creates a Gson instance. The third line calls the gson.fromJson() method which parses the JSON string into a Car object.

The first parameter to fromJson() is the JSON source. In the example above the JSON source is a string. The second parameter to the fromJson() method is the Java class to parse parse the JSON into an instance of. The Gson instance creates an instance of this class and parses the JSON into it. Thus you should make sure that this class has a no-arg constructor, or GSON cannot use it.

Here is how the Car class looks:

Код: java
1.
2.
3.
4.
public class Car {
    public String brand = null;
    public int    doors = 0;
}
...
Рейтинг: 0 / 0
13.12.2018, 09:51
    #39747137
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JsonValue из строки
SergunkaНа самом деле более удобный это библиотека Гугла GSONну дак все свелось к парсеру в итоге? А не типу?
...
Рейтинг: 0 / 0
14.12.2018, 04:06
    #39747684
Sergunka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JsonValue из строки
Petro123SergunkaНа самом деле более удобный это библиотека Гугла GSONну дак все свелось к парсеру в итоге? А не типу?

Ну, дык тогда на stackoverflow.com

https://stackoverflow.com/questions/20624042/how-to-get-json-element-type-with-gson
...
Рейтинг: 0 / 0
14.12.2018, 04:08
    #39747685
Sergunka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JsonValue из строки
Petro123Владимир П.,
Я поставил под сомнение постановку задачи вашего величества.
Куда уж конкретнее?
По логике нужна задача на ранг выше.
Программисты часто выдумывают задачи для себя любимых.
Тип зачем понадобился?
Нужно парсить - берем парсер. И т.д.

АААА! я не читал Вашу дискуссию с ТС
...
Рейтинг: 0 / 0
14.12.2018, 07:24
    #39747697
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JsonValue из строки
Sergunka,
))
...
Рейтинг: 0 / 0
14.12.2018, 09:56
    #39747750
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JsonValue из строки
Просто если делать одним методом, он получится сильно перегруженным аргументами, что не хорошо. Видимо по этому и подход такой.
...
Рейтинг: 0 / 0
14.12.2018, 10:03
    #39747753
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JsonValue из строки
HettПросто если делать одним методом, он получится сильно перегруженным аргументами, что не хорошо. Видимо по этому и подход такой.
Вы про парсер?
Не вижу там никаких аргументов.
Тоже самое что и xml.
...
Рейтинг: 0 / 0
14.12.2018, 14:45
    #39747949
Valentin Kolesnikov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JsonValue из строки
В spring-boot так можно получить значение строки.

Код: java
1.
2.
3.
4.
            org.springframework.boot.json.JsonParser springParser =
                org.springframework.boot.json.JsonParserFactory.getJsonParser();
            Map<String, Object> object = springParser.parseMap(jsonString);
            String birthday = String.valueOf(object.get("birthday"));



С уважением, Валентин
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / JsonValue из строки / 24 сообщений из 24, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]