Пройдите по всем узлам дерева объектов JSON с помощью JavaScript

Все простят меня за это. Советы Дж. Б. Низета намного лучше, но я хотел посмотреть, что я смогу сделать.

public static void touch(
        final Consumer<byte[]> setByte,
        final Consumer<? super String> setByteValue,
        final Supplier<String> byteString,
        final Supplier<String> byteValue) {
    if (byteString != null) {
        setByte.accept(Base64.getDecoder().decode(byteString.get()));
    }

    if (byteValue.get() == null) {
        setByteValue.accept(DEFAULT_BYTE_VALUE);
    }
}
<ч>
touch(
        foo::setByte1,
        foo::setByte1Value,
        foo::getByte1String,
        foo::getByte1Value
);

touch(
        foo::setByte2,
        foo::setByte2Value,
        foo::getByte2String,
        foo::getByte2Value
);
140
задан Patsy Issa 18 August 2015 в 12:56
поделиться

3 ответа

Если Вы думаете, что jQuery является видом излишества для такой примитивной задачи, Вы могли бы сделать что-то как этот:

//your object
var o = { 
    foo:"bar",
    arr:[1,2,3],
    subo: {
        foo2:"bar2"
    }
};

//called with every property and its value
function process(key,value) {
    console.log(key + " : "+value);
}

function traverse(o,func) {
    for (var i in o) {
        func.apply(this,[i,o[i]]);  
        if (o[i] !== null && typeof(o[i])=="object") {
            //going one step down in the object tree!!
            traverse(o[i],func);
        }
    }
}

//that's all... no magic, no bloated framework
traverse(o,process);
212
ответ дан 23 November 2019 в 23:13
поделиться

Объект JSON является просто объектом JavaScript. Это на самом деле, что обозначает JSON: Объектная нотация JavaScript. Таким образом, Вы пересекли бы объект JSON однако, Вы примете решение "пересечь" объект JavaScript в целом.

В ES2017 Вы сделали бы:

Object.entries(jsonObj).forEach(([key, value]) => {
    // do something with key and val
});

Можно всегда писать функцию для рекурсивного убывания в объект:

function traverse(jsonObj) {
    if( jsonObj !== null && typeof jsonObj == "object" ) {
        Object.entries(jsonObj).forEach(([key, value]) => {
            // key is either an array index or object key
            traverse(value);
        });
    }
    else {
        // jsonObj is a number or string
    }
}

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

63
ответ дан 23 November 2019 в 23:13
поделиться

Зависит от того, что Вы хотите сделать. Вот пример пересечения дерева объектов JavaScript, печатая ключи и значения, когда это идет:

function js_traverse(o) {
    var type = typeof o 
    if (type == "object") {
        for (var key in o) {
            print("key: ", key)
            js_traverse(o[key])
        }
    } else {
        print(o)
    }
}

js> foobar = {foo: "bar", baz: "quux", zot: [1, 2, 3, {some: "hash"}]}
[object Object]
js> js_traverse(foobar)                 
key:  foo
bar
key:  baz
quux
key:  zot
key:  0
1
key:  1
2
key:  2
3
key:  3
key:  some
hash
13
ответ дан 23 November 2019 в 23:13
поделиться
Другие вопросы по тегам:

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