Лучший способ проанализировать более одного JSON с JsonSlurper

Я тоже сталкиваюсь с ошибкой.

Я попробовал ServicePointManager.ServerCertificateValidationCallback и ServicePointManager.CertificatePolicy, но все еще не работал.

Я гнев. создайте обертку cURL. Это отлично работает для моего игрушечного проекта.

/// <summary>
/// For MONO ssl decryption failed
/// </summary>
public static string PostString(string url, string data)
{
    Process p = null;
    try
    {
        var psi = new ProcessStartInfo
        {
            FileName = "curl",
            Arguments = string.Format("-k {0} --data \"{1}\"", url, data),
            RedirectStandardOutput = true,
            UseShellExecute = false,
            CreateNoWindow = false,
        };

        p = Process.Start(psi);

        return p.StandardOutput.ReadToEnd();
    }
    finally
    {
        if (p != null && p.HasExited == false)
            p.Kill();
    }
}
1
задан Huang Yuheng 27 March 2019 в 08:35
поделиться

1 ответ

Вы можете думать о JsonSlurper как о фасаде для создания конкретной реализации парсера JSON. Например, парсер по умолчанию, который создается каждый раз, когда вы вызываете методы parse() или parseText(), это JsonParserCharArray. Если вы посмотрите на исходный код JsonSlurper, то увидите, что он инкапсулирует следующие пять приватных полей:

    private int maxSizeForInMemory = 2000000;
    private boolean chop = false;
    private boolean lazyChop = true;
    private boolean checkDates = true;

    private JsonParserType type = JsonParserType.CHAR_BUFFER;

Когда вы создаете JsonSlurper, вы используете эти значения по умолчанию, но для любого конкретного случая использования Вы можете изменить их так, чтобы они наилучшим образом соответствовали вашим потребностям.

Отвечая на ваш первый вопрос, имеет смысл создать экземпляр JsonSlurper и использовать его для анализа всех строк при выполнении итерации списка. Примерно так:

def slurper = new JsonSlurper()
def parsed = jsons.collect { slurper.parseText(it) }

Если ваш список имеет размер 1000, скажем, он создаст один объект JsonSlurper и 1000 JsonParser объектов вместо 1000 JsonSlurper объектов и 1000 JsonParser объектов .

Отвечая на ваш второй вопрос, нет хорошего контекстного ответа на этот вопрос. Это сильно зависит от нескольких факторов, таких как загрузка сервера, частота сериализации / десериализации JSON, доступная память, варианты использования JsonSlurper и так далее. На самом деле вы должны контролировать свое приложение и экспериментировать с обоими подходами, чтобы увидеть, что работает лучше для вас. Например, если ваше приложение постоянно обрабатывает HTTP-запросы и постоянно создает одни и те же JsonSlurper и использует одни и те же значения по умолчанию, то вы можете рассмотреть возможность создания синглтоноподобного компонента, который внедряет один и тот же экземпляр JsonSlurper для обработки каждого HTTP запрос. Но с другой стороны, если ваше приложение не страдает от множества параллельных запросов и в среднем обрабатывает несколько последовательных запросов, то сохранение объекта JsonSlurper в памяти на все время может показаться расточительным использованием ресурсов. [+1121]

0
ответ дан Szymon Stepniak 27 March 2019 в 08:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: