Почти все предоставленные ответы требуют полной десериализации JSON в объект Java перед тем, как получить доступ к значению интересующего свойства. Другой альтернативой, которая не идет по этому пути, является использование JsonPATH , который похож на XPath для JSON и позволяет перемещаться по объектам JSON.
Это спецификация и хорошие люди в JayWay создали Java-реализацию для спецификации, которую вы можете найти здесь: https://github.com/jayway/JsonPath
Поэтому, чтобы использовать его, добавьте его в свой проект , например:
com.jayway.jsonpath
json-path
${version}
и использовать:
String pageName = JsonPath.read(yourJsonString, "$.pageInfo.pageName");
String pagePic = JsonPath.read(yourJsonString, "$.pageInfo.pagePic");
String post_id = JsonPath.read(yourJsonString, "$.pagePosts[0].post_id");
и т. д. ...
Проверьте дополнительную страницу спецификации JsonPath для получения дополнительной информации о других способах к поперечному JSON.
OutOfMemoryError
- это исключение, созданное виртуальной машиной Java (JVM), потому что ему необходимо выделить память для (нового) объекта, но для объекта недостаточно памяти. JVM сначала попытается освободить память, используемую мертвыми объектами, запустит сборщик мусора .
Поскольку OutOfMemoryError
является VirtualMachineError
, JVM разрешено бросить его в любое время , хотя он должен попытаться освободить память через сборку мусора в первую очередь .
Однако на практике это, скорее всего, будет выбрано из new
, который пытался создать объект, для которого память не может быть выделена. Таким образом, вы должны сначала изучить stacktrace, связанный с исключением, для подсказки о причине проблемы, , как и для любого другого исключения .
int[] values = new int[n]
) причиной может быть то, что вы пытаетесь создать слишком большой массив (слишком большой размер n
). Вы ошиблись при вычислении размера массива, который вам нужен? ArrayList.reserve(int)
и HashMap(int)
, должны выделять хранилище для будущего использования. Вы допустили ошибку при вычислении размера контейнера, который вам нужен? for
цикл, вы просите его зациклировать правильное количество раз? Если stacktrace не дает достаточного количества подсказок, вы можете попробовать использовать профилировщик кучи. Это программа мониторинга, которая позволяет вам анализировать память, используемую для объектов во время работы программы, или рассматривает кучу кучи кучи , записанную при выходе программы. Он может предоставлять информацию о размерах, числе и классах объектов, хранящихся в памяти.
JVM имеет конечный объем памяти , доступный для него. Вы можете сделать вывод, что программа работает правильно, но для этого требуется больше памяти для работы, чем было доступно для нее. Если вы явно не укажете JVM, сколько памяти использовать, большинство реализаций выберет разумную величину по умолчанию в зависимости от объема оперативной памяти, которую имеет ваш компьютер, но эта сумма может быть слишком мала для вашей программы , Параметры командной строки для JVM могут управлять объемом памяти. Для большинства реализаций JVM наиболее важными из них являются -Xmx
и -Xms
.
Чтобы отладить OutOfMemoryError
, вызовите JVM с опцией -XX:+HeapDumpOnOutOfMemoryError
, которая вызовет выгрузку кучи при возникновении OutOfMemoryError
. Затем используйте инструмент, например VisualVM , jhat или fasthat , чтобы посмотреть на кучу кучи.
Вы также можете сгенерировать дамп кучи вручную в любое время с помощью jmap с опцией -dump
.
Раскрытие: я являюсь сторонником fasthat, который является вилкой jhat .
Когда ресурсы приложения заканчиваются из выделенной памяти кучи JVM, генерируется исключение OutOfMemmoryException. Попробуйте увеличить размер кучи JVM.
Эта проблема возникает, когда tomcat выходит из памяти, т. е. у tomcat меньше памяти сконфигурировано, чем приложение, необходимое для запуска приложения.
Итак, чтобы преодолеть эту проблему, перейдите в каталог bin tomcat и создайте новый файл setenv .bat и определить PermSize в этом файле, как показано ниже:
установить JAVA_OPTS = -Dfile.encoding = UTF-8 -Xms512m -Xmx1024m -XX: PermSize = 512m -XX: MaxPermSize = 1024m
PermSize может быть настроен на более высокий диапазон в соответствии с требованиями приложения.