Анализ JSON с использованием org.json в Java для большого файла JSON/личности Watson

Я немного посмотрел, но не совсем понял, как я должен был извлекать определенные значения из этой строки json: http://pastebin.com/mvMrcii5

Я сгенерировал его, используя API-интерфейс Watson Personal Insights, и, насколько я понимаю, я должен просто использовать org.json для преобразования объекта профиля, используемого для извлечения json, в фактический JSONObject, и до сих пор я мог ввести

JSONObject objectArray = new JSONObject(profile); 

и он не выдал никаких ошибок. Я просто не знаю, как мне получить конкретный trait_id и связанный с ним процентиль из JSON с сотнями разных экземпляров одних и тех же ссылок. В идеале все они должны быть помещены в разные переменные, чтобы печатать их отдельно. Я также мог бы разобрать его как CSV, если выбор определенных объектов в JSON вызывает слишком много проблем.

Я был бы очень признателен за любую помощь, стуча головой об стену с этим.


person Jako81624    schedule 25.02.2017    source источник
comment
Добро пожаловать в Stack Overflow! Пожалуйста, просмотрите наш Контрольный список вопросов SO, чтобы помочь вам задать хороший вопрос и, таким образом, получить хороший ответ.   -  person Joe C    schedule 25.02.2017
comment
Ваш вопрос слишком расплывчатый. Все, что мы можем ответить, это то, что способ извлечения информации из JSONObject описан в документации API JSONObject. Вы читали его? Вы пробовали что-нибудь?   -  person JB Nizet    schedule 25.02.2017
comment
Я пробовал что-то делать с org.json и gson, но это было слишком запутанно и, в конце концов, слишком сложно. Я разместил свой рабочий код ниже и в конце концов использовал jsonpath в качестве своей предпочтительной библиотеки!   -  person Jako81624    schedule 26.02.2017


Ответы (1)


В конце концов я придумал, как это сделать. Для тех, кто использует Watson SDK и Java и хочет найти решение, вот мое:

    Profile profile = service.getProfile(secondArray).execute();
    String textProfile = profile.toString();        
    Object document = Configuration.defaultConfiguration().jsonProvider().parse(textProfile);
    String nameWatson = JsonPath.read(document, "$.personality[0].name");
    Double percentWatson = JsonPath.read(document, "$.personality[0].percentile");

Это работает с использованием библиотеки JayWay JSONPath, добавьте в maven с помощью:

    <dependency>
        <groupId>com.jayway.jsonpath</groupId>
        <artifactId>json-path</artifactId>
        <version>2.2.0</version>
    </dependency>

Первая строка Java выполняет запрос Watson и сохраняет его в объекте профиля как профиль в формате JSON по умолчанию. Затем преобразует его в строку и сохраняет как textProfile. Следующая строка использует библиотеку jsonpath для сохранения теперь преобразованного профиля как нечто, что библиотека jsonpath может прочитать через переменную textProfile. Затем предпоследняя строка пересекает иерархию макета Watson JSON, чтобы сохранить первый экземпляр имени в разделе личности как nameWatson, и та же идея применяется к следующей строке. Если у вас возникли проблемы с этим, распечатайте переменную профиля на экране и сохраните ее в текстовом файле, чтобы ссылаться на нее позже, и используйте это, чтобы протестировать его перед внедрением в код. Обратите внимание, что использование любых модификаторов, таких как «..», приведет к ошибке, если они не будут добавлены в список, поэтому обязательно используйте определенные ссылки (подробнее читайте на jsonpath github)

person Jako81624    schedule 25.02.2017