JSON.stringify () выстраивают странность с Prototype.js

Ваш код почти близок к лучшему подходу, но я все же попытался добавить несколько вещей -

1. Рассчитать «top» один раз и использовать его для сравнения.

2.Используйте отдельное определение столбца, это поможет улучшить удобочитаемость и удобство обслуживания.

 from pyspark.sql.window import Window

windowSpec = Window.partitionBy('Day')
top = max('sensitive_id').over(windowSpec).alias('top')

df.select('Day','Num','sensitive_id',top).withColumn('top_sensitive_id', expr("CASE WHEN sensitive_id = top THEN top END")).show()
83
задан Bergi 21 September 2014 в 13:04
поделиться

5 ответов

Поскольку JSON.stringify в последнее время поставляется с некоторыми браузерами, я бы предложил использовать его вместо прототипа toJSON. Затем вы должны проверить window.JSON && window.JSON.stringify и включить только библиотеку json.org в противном случае (через document.createElement ('script') …). Чтобы устранить несовместимость, используйте:

if(window.Prototype) {
    delete Object.prototype.toJSON;
    delete Array.prototype.toJSON;
    delete Hash.prototype.toJSON;
    delete String.prototype.toJSON;
}
77
ответ дан 24 November 2019 в 08:48
поделиться

Я не настолько быстр с Прототипом, но я видел это в его документах:

Object.toJSON({"a":[1,2]})

Я не уверен, имело ли это ту же проблему, текущее кодирование имеет, все же.

Существует также более длинное учебное руководство об использовании JSON с Прототипом.

2
ответ дан Powerlord 24 November 2019 в 08:48
поделиться

Вот то, как я имею дело с ним.

var methodCallString =  Object.toJSON? Object.toJSON(options.jsonMethodCall) :  JSON.stringify(options.jsonMethodCall);
1
ответ дан morgancodes 24 November 2019 в 08:48
поделиться

Я думаю, что лучшим решением было бы включить это сразу после загрузки прототипа

JSON = JSON || {};

JSON.stringify = function(value) { return value.toJSON(); };

JSON.parse = JSON.parse || function(jsonsring) { return jsonsring.evalJSON(true); };

Это делает функцию прототипа доступной как стандартные JSON.stringify () и JSON.parse (), но сохраняет собственный JSON.parse (), если он доступен, что делает его более совместимым со старыми браузерами.

4
ответ дан 24 November 2019 в 08:48
поделиться

Люди уже привели причины, по которым я обычно выручаю: старый (больше не применимый к большинству компиляторов) аргумент о том, чтобы не включать stdlib.h и использовать sizeof * p , чтобы убедиться, что типы и размеры всегда совпадают независимо от последующего обновления. Я хочу указать еще на один аргумент против кастинга. Он маленький, но я думаю, он применим.

C довольно слабо набран. Большинство преобразований безопасного типа происходит автоматически, а для большинства небезопасных требуется приведение. Рассмотрим:

int from_f(float f)
{
    return *(int *)&f;
}

Это опасный код. Это технически неопределенное поведение, хотя на практике оно будет делать то же самое почти на каждой платформе, на которой вы его запускаете. А актёрский состав помогает сказать вам "Этот код - ужасный взлом".

Подумайте:

int *p = (int *)malloc(sizeof(int) * 10);

Я вижу актёрский состав, и мне интересно: "Зачем это нужно? Где взлом? Это поднимает волосы на моей шее, что происходит что-то зло, когда на самом деле код совершенно безвреден.

Пока мы используем C, слепки (особенно слепки указателей) - это способ сказать: «Здесь происходит что-то злое и легко разрушаемое». Они могут достичь того, что вам нужно, но они указывают вам и будущим сопровождающим, что дети не в порядке.

Использование слепков на каждом маллоке уменьшает индикацию «взлома» при показании указателя. Это делает менее страшным видеть такие вещи, как * (int *) & f; .

Примечание: C и C++ - разные языки. C слабо типизируется, C++ более сильно типизируется. Слепки необходимы в C++, даже если они вообще не указывают на взлом, из-за (на мой скромный взгляд) излишне сильной системы типа C++. (Действительно, этот конкретный случай - единственное место, где, я думаю, система типа C++ «слишком сильна», но я не могу придумать место, где она «слишком слаба», что делает ее в целом слишком сильной для моих вкусов.)

Если вы беспокоитесь о совместимости C++, не стоит. Если вы пишете C, используйте компилятор C. Есть много действительно хороших, доступных для каждой платформы. Если по какой-то странной причине у вас есть для записи кода C, который компилируется чисто как C++, вы на самом деле не пишете C. Если вам нужно портировать C на C++, вы должны внести много изменений, чтобы сделать ваш код C более идиоматичным C++.

Если вы не можете сделать ничего из этого, ваш код не будет довольно независимо от того, что вы делаете, так что на самом деле не важно, как вы решите сделать в этот пункт. Мне нравится идея использования шаблонов для создания нового распределителя, который возвращает правильный тип, хотя это в основном просто переосмысление ключевого слова new .

-121--1713949-

Изменить, чтобы сделать несколько более точным:

Бит ключа проблемы находится в библиотеке JSON из JSON.org (и других реализациях объекта JSON ECMAScript 5):

        if (value && typeof value === 'object' &&
                typeof value.toJSON === 'function') {
            value = value.toJSON(key);
        }

Проблема в том, что библиотека Prototype расширяет массив, чтобы включить метод toJSON, который JSON Когда объект JSON достигает значения массива, вызываемого toJSON для массива, определенного в Prototype,и этот метод возвращает последовательности версию массива. Следовательно, кавычки вокруг скобок массива.

При удалении toJSON из объекта Array библиотека JSON должна работать правильно. Или просто используйте библиотеку JSON.

8
ответ дан 24 November 2019 в 08:48
поделиться
Другие вопросы по тегам:

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