递归解析JSON

新手上路,请多包涵

我有一个用 Python 创建的大型 JSON 对象,我现在需要在网页上显示信息。我的问题是它的大小;里面有嵌套的数组和对象,有好几层深。我写了一个非常不优雅(和错误)的 JavaScript 函数来提取数据,但这对我来说似乎是一个递归问题,不幸的是我还不习惯那样思考(还)。

有谁知道解析读取此类对象的好解决方案?我的目标是真正地动态地阅读它,因为我将不得不多次这样做(并且每次对象都会不同,但或多或少具有相同的结构)。 目标是获取此信息并将其有意义地显示在网页上。

如果我可以进一步详细说明,请告诉我。

编辑:这是对象。当我发布这个时我不在我的电脑旁边,而且它相当大。我已经删除了其中可能敏感的部分。我正在使用 JSON2 将其解析为字符串以外的内容。只是大小和嵌套给我带来了问题。

{
    "Loop300": [
        {
            "Loop310": [
                {
                    "N1": {
                        "idCode": "0400",
                        "idQual": "ZZ",
                        "name": "REDACTED",
                        "entIdCode": "SF"
                    },
                    "N3": [
                        {
                            "address1": "REDACTED",
                            "address2": "REDACTED"
                        }
                    ],
                    "G61": [
                        {
                            "contactFunctionCode": "CN",
                            "commNumber": "REDACTED",
                            "commNumQualifier": "TE",
                            "name": "shipping"
                        }
                    ],
                    "N4": [
                        {}
                    ]
                }
            ],
            "L11": [],
            "S5": {
                "stopReasonCode": "LD",
                "stopSeqNum": "1"
            },
            "Loop350": [
                {
                    "LAD": [],
                    "OID": {
                        "weight": "161",
                        "poNum": "ASDF",
                        "weightCode": "L",
                        "unitMeasure": "CA",
                        "refID": "THING",
                        "quantity": "6"
                    },
                    "Loop360": [
                        {
                            "Loop365": [],
                            "L5": {
                                "lineNum": "1",
                                "desc": "STUFF"
                            }
                        }
                    ]
                },
                {
                    "LAD": [],
                    "OID": {
                        "weight": "104",
                        "poNum": "ZXMO",
                        "weightCode": "L",
                        "unitMeasure": "CA",
                        "refID": "STUFF",
                        "quantity": "6"
                    },
                    "Loop360": [
                        {
                            "Loop365": [],
                            "L5": {
                                "lineNum": "2",
                                "desc": "STUFF"
                            }
                        }
                    ]
                },
                {
                    "LAD": [],
                    "OID": {
                        "weight": "1833",
                        "poNum": "ASDF",
                        "weightCode": "L",
                        "unitMeasure": "CA",
                        "refID": "THEBLOB",
                        "quantity": "40"
                    },
                    "Loop360": [
                        {
                            "Loop365": [],
                            "L5": {
                                "lineNum": "3",
                                "desc": "STUFF"
                            }
                        }
                    ]
                },
                {
                    "LAD": [],
                    "OID": {
                        "weight": "229",
                        "poNum": "FDSA",
                        "weightCode": "L",
                        "unitMeasure": "CA",
                        "refID": "BATMAN",
                        "quantity": "6"
                    },
                    "Loop360": [
                        {
                            "Loop365": [],
                            "L5": {
                                "lineNum": "4",
                                "desc": "STUFF"
                            }
                        }
                    ]
                }
            ],
            "AT5": [],
            "G62": [
                {
                    "date": "20100817",
                    "datequalifier": "10"
                },
                {
                    "date": "20100817",
                    "datequalifier": "38"
                }
            ],
            "NTE": [
                {
                    "refCode": "OTH",
                    "desc": "No Touch"
                }
            ]
        },
        {
            "Loop310": [
                {
                    "N1": {
                        "idCode": "9998000006",
                        "idQual": "ZZ",
                        "name": "REDACTED",
                        "entIdCode": "SF"
                    },
                    "N3": [
                        {
                            "address1": "REDACTED"
                        }
                    ],
                    "G61": [
                        {
                            "contactFunctionCode": "CN",
                            "commNumber": "REDACTED",
                            "commNumQualifier": "TE",
                            "name": "REDACTED"
                        }
                    ],
                    "N4": [
                        {}
                    ]
                }
            ],
            "L11": [],
            "S5": {
                "stopReasonCode": "LD",
                "stopSeqNum": "2"
            },
            "Loop350": [
                {
                    "LAD": [],
                    "OID": {
                        "poNum": "QWERTY",
                        "refID": "ASDF",
                        "unitMeasure": "PL",
                        "quantity": "1"
                    },
                    "Loop360": [
                        {
                            "Loop365": [],
                            "L5": {
                                "lineNum": "1",
                                "desc": "PORT"
                            }
                        }
                    ]
                }
            ],
            "AT5": [],
            "G62": [
                {
                    "date": "20100817",
                    "datequalifier": "10"
                },
                {
                    "date": "20100817",
                    "datequalifier": "38"
                }
            ],
            "NTE": [
                {
                    "refCode": "OTH",
                    "desc": "Driver Count Required"
                }
            ]
        },
        {
            "Loop310": [
                {
                    "N1": {
                        "idCode": "9998000070",
                        "idQual": "ZZ",
                        "name": "PLACE",
                        "entIdCode": "ST"
                    },
                    "N3": [
                        {
                            "address1": "PLACE"
                        }
                    ],
                    "G61": [
                        {
                            "contactFunctionCode": "CN",
                            "commNumber": "XXXXXXXXXX",
                            "commNumQualifier": "TE",
                            "name": "X"
                        }
                    ],
                    "N4": [
                        {}
                    ]
                }
            ],
            "L11": [],
            "S5": {
                "stopReasonCode": "UL",
                "stopSeqNum": "3"
            },
            "Loop350": [
                {
                    "LAD": [],
                    "OID": {
                        "poNum": "JOE",
                        "refID": "SUPERMAN",
                        "unitMeasure": "PL",
                        "quantity": "1"
                    },
                    "Loop360": [
                        {
                            "Loop365": [],
                            "L5": {
                                "lineNum": "1",
                                "desc": "PORT"
                            }
                        }
                    ]
                }
            ],
            "AT5": [],
            "G62": [
                {
                    "date": "20100817",
                    "datequalifier": "68"
                },
                {
                    "date": "20100817",
                    "datequalifier": "54"
                }
            ],
            "NTE": [
                {
                    "refCode": "OTH",
                    "desc": "No Touch"
                }
            ]
        },
        {
            "Loop310": [
                {
                    "N1": {
                        "idCode": "0000403803",
                        "idQual": "ZZ",
                        "name": "REDACTED",
                        "entIdCode": "ST"
                    },
                    "N3": [
                        {
                            "address1": "REDACTED"
                        }
                    ],
                    "G61": [
                        {
                            "contactFunctionCode": "CN",
                            "commNumber": "0000000000",
                            "commNumQualifier": "TE",
                            "name": "REDACTED"
                        }
                    ],
                    "N4": [
                        {}
                    ]
                }
            ],
            "L11": [
                {
                    "qualifier": "DO",
                    "refID": "THETHING"
                }
            ],
            "S5": {
                "stopReasonCode": "UL",
                "stopSeqNum": "4"
            },
            "Loop350": [
                {
                    "LAD": [],
                    "OID": {
                        "weight": "161",
                        "poNum": "UIP",
                        "weightCode": "L",
                        "unitMeasure": "CA",
                        "refID": "JACK",
                        "quantity": "6"
                    },
                    "Loop360": [
                        {
                            "Loop365": [],
                            "L5": {
                                "lineNum": "1",
                                "desc": "STUFF"
                            }
                        }
                    ]
                },
                {
                    "LAD": [],
                    "OID": {
                        "weight": "104",
                        "poNum": "JKLM",
                        "weightCode": "L",
                        "unitMeasure": "CA",
                        "refID": "SUSAN",
                        "quantity": "6"
                    },
                    "Loop360": [
                        {
                            "Loop365": [],
                            "L5": {
                                "lineNum": "2",
                                "desc": "STUFF"
                            }
                        }
                    ]
                },
                {
                    "LAD": [],
                    "OID": {
                        "weight": "1833",
                        "poNum": "ASDF",
                        "weightCode": "L",
                        "unitMeasure": "CA",
                        "refID": "JOE",
                        "quantity": "40"
                    },
                    "Loop360": [
                        {
                            "Loop365": [],
                            "L5": {
                                "lineNum": "3",
                                "desc": "STUFF"
                            }
                        }
                    ]
                },
                {
                    "LAD": [],
                    "OID": {
                        "weight": "229",
                        "poNum": "AAAA",
                        "weightCode": "L",
                        "unitMeasure": "CA",
                        "refID": "ASDF",
                        "quantity": "6"
                    },
                    "Loop360": [
                        {
                            "Loop365": [],
                            "L5": {
                                "lineNum": "4",
                                "desc": "STUFF"
                            }
                        }
                    ]
                }
            ],
            "AT5": [],
            "G62": [
                {
                    "date": "20100817",
                    "datequalifier": "68"
                },
                {
                    "date": "20100817",
                    "datequalifier": "54"
                }
            ],
            "NTE": [
                {
                    "refCode": "OTH",
                    "desc": "Driver Assist Required"
                }
            ]
        }
    ],
    "SE": {
        "numSegments": "70",
        "controlNum": "0002"
    },
    "Loop100BT": [],
    "L11": [
        {
            "qualifier": "VD",
            "refID": "SALLY"
        },
        {
            "qualifier": "SI",
            "refID": "MARK"
        },
        {
            "qualifier": "CR",
            "refID": "JOE"
        },
        {
            "qualifier": "RB",
            "refID": "USD"
        },
        {
            "qualifier": "TH",
            "refID": "REDACTED"
        }
    ],
    "PLD": [],
    "L3": {
        "weight": "2328",
        "advances": "0",
        "rateQual": "FR",
        "charge": "05",
        "freightRate": "",
        "weightQual": "G",
        "quantity": "59"
    },
    "B2": {
        "ordernum": "12345",
        "paymethod": "PP",
        "scac": "XXXX"
    },
    "Loop100VI": [
        {
            "N1": {
                "name": "REDACTED",
                "entIdCode": "AA"
            },
            "G61": [
                {
                    "contactFunctionCode": "CN",
                    "commNumber": "REDACTED",
                    "contactReference": "0563",
                    "commNumQualifier": "TE",
                    "name": "REDACTED"
                },
                {
                    "contactFunctionCode": "IC",
                    "commNumber": "REDACTED",
                    "commNumQualifier": "EM",
                    "name": "REDACTED"
                },
                {
                    "contactFunctionCode": "ZZ",
                    "name": "REDACTED"
                }
            ]
        }
    ],
    "G62": [
        {
            "date": "20100827",
            "timequalifier": "1",
            "datequalifier": "64",
            "time": "1302"
        }
    ],
    "Loop100CB": [],
    "NTE": [
        {
            "refCode": "ZZZ",
            "desc": "26"
        },
        {
            "refCode": "OTH",
            "desc": "No Touch"
        },
        {
            "refCode": "OTH",
            "desc": "Driver Count Required"
        },
        {
            "refCode": "OTH",
            "desc": "No Touch"
        },
        {
            "refCode": "OTH",
            "desc": "Driver Assist Required"
        }
    ],
    "B2A": {
        "purpose": "00"
    },
    "N7": [
        {
            "equipLength": "4800",
            "equipHeight": "0",
            "weight": "2328",
            "equipWidth": "0",
            "equipNum": "ZZZZ",
            "equipType": "TV",
            "weightQual": "G"
        }
    ]
}

谢谢,TJ

原文由 tjsimmons 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 420
1 个回答

你的意思是这样的吗?

 function iterateAttributesAndFormHTMLLabels(o){
    var s = '';
    for(var a in o){
        if (typeof o[a] == 'object'){
            s+='<label><font color=green>'+a+':</font></label><br />';
            s+=iterateAttributesAndFormHTMLLabels(o[a]);
        }else{
            s+='<label>'+a+': <font color=blue>'+o[a]+'</font></label><br />';
        }//end if
    }//end for
    return s;
}//end function

data = {...};

var html = iterateAttributesAndFormHTMLLabels(data);

不知道它是否适用于所有浏览器,适用于 Chrome 和 firefox

干杯,伊恩

原文由 Ian S Williams 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏