如何递归迭代JsonObject的属性?

时间:2017-12-14 08:27:11

标签: json recursion reflection kotlin

我将字符串解析为JSON对象,我需要能够递归地遍历对象的属性。所以我试图创建一个迭代对象属性的函数,如果一个属性不是一个原语,那么用属性本身再次调用该函数(递归)。

在Javascript中,我可以这样解决:

function forEachAttribute(object) {
    for (let key in object) {
        let attribute = object[key];
        if (typeof attribute === "object") {
            forEachAttribute(attribute);
        } else {
            console.log(key + ": " + attribute);
        }
    }
}

let myObject = {
    innerObject: {
        x: 123
    },
    y: 456
};

forEachAttribute(myObject);

但我正在远离Javascript,并试图学习如何使用Kotlin。所以我找到了a way to iterate through the attributes of a JSON object

但我不太清楚如何确定属性是否是原始属性。

import kotlin.js.Json

fun iterateThroughAttributes(jsonObject: Json) {
    for (key in js("Object").keys(jsonObject)) {
        val attribute = jsonObject[key]
        // How do I determine if the attribute is a primitive, or not?
    }
}

fun main (args: Array<String>) {
    val someString = "(some json string)"
    val jsonObject = JSON.parse<Json>(someString)
    iterateThroughAttributes(jsonObject)
}

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

您可以使用is来检查对象是否属于某种类型,这相当于java中的instanceOf

有关详细信息,请参阅this question