【发布时间】:2018-03-16 02:48:41
【问题描述】:
我正在编写一个工具,它将接收一个入站 Json 对象,并将其转换为 键值记录(有时称为展平,也许)。目的是避免工具在获得非常大或非常嵌套的 Json 对象时损坏,所以我想避免递归。
一个示例对象可能是这样的(如下),包含嵌套数组、空值,你可以命名它,实际上是任何合法的 json...
{
"firstName": "John",
"lastName": "Smith",
"isAlive": true,
"age": 25,
"address": {
"streetAddress": "21 2nd Street",
"city": "New York",
"state": "NY",
"postalCode": "10021-3100"
},
"phoneNumbers": [
{
"type": "home",
"number": "212 555-1234"
},
{
"type": "office",
"number": "646 555-4567"
},
{
"type": "mobile",
"number": "123 456-7890"
}
],
"children": [],
"spouse": null
}
上述对象的期望输出将是对象的每个元素的键值对...
Key Value
/firstName "John"
/lastName "Smith"
/isAlive "true"
/age "25"
/address
/address/streetAddress "21 2nd Street"
/address/city "New York"
/address/state "NY"
/address/postalCode "10021-3100"
/phoneNumbers
/phoneNumbers/1/
/phoneNumbers/1/type "home"
/phoneNumbers/1/number "212 555-1234"
/phoneNumbers/2/
/phoneNumbers/2/type "office"
/phoneNumbers/2/number "646 555-4567"
/phoneNumbers/3/
/phoneNumbers/3/type "mobile"
/phoneNumbers/3/number "123 456-7890"
/children
/spouse
我将上面的示例对象作为动态对象保存在内存中,使用 Newtonsoft 的 JSON 类导入。只是为了重新迭代,理想的解决方案不会涉及递归,因为一个爆炸的堆栈会很糟糕。感谢您提供任何帮助。
【问题讨论】:
-
Nuget 包 newtonsoft json 有帮助吗?听起来他们已经为您编写了您的工具newtonsoft.com/json
-
如果你在 JSON 中递归时炸毁你的堆栈,我会说 JSON 比你炸毁的堆栈更糟糕。无论如何,我在你的问题中没有看到任何代码,没有任何迹象表明你自己做了什么,感觉就像你在要求我们给你写一段代码......
-
@Aaron.S - 是的,我正在使用它。我将字符串转换为动态对象,但对象结构未知,所以问题是如何访问动态 json 对象的每个节点。感谢您的帖子。
-
@oerkelens - 这不是我的 Json,这是一个转换任何未知 Json 的工具。使用递归会使工具用户暴露于 Stack Overflow。这也是恶意攻击的弱点。我知道您认为我试图欺骗一些免费的代码工作,但实际上我被困在如何遍历动态 json 对象上。我会通过反复试验找出答案,但我认为 SO 帖子会给我一些线索。我当前的代码只是将一个字符串加载到一个 Json 对象(动态 parsedJsonObject = Newtonsoft.Json.JsonConvert.DeserializeObject(json); )。问:如何行走这个物体...
-
@oerkelens 保持话题。您的“代码投诉”是不必要的