任务目标:在不使用库的情况下创建一个复杂的 json 字符串解析器。
问题:请告诉我解决问题的理论方法。您可能需要使用递归,但尚不清楚最好以哪种形式存储结果。可以有任意数量的级别,每个字段存储下一个对象或字符串。
示例 json 字符串:
{
"lvl-1a": "Result 1",
"lvl-1b":{
"lvl-2a": "Result 2",
"lvl-2b": {
"lvl-3a": "Result 3"
}
}
}
任务目标:在不使用库的情况下创建一个复杂的 json 字符串解析器。
问题:请告诉我解决问题的理论方法。您可能需要使用递归,但尚不清楚最好以哪种形式存储结果。可以有任意数量的级别,每个字段存储下一个对象或字符串。
示例 json 字符串:
{
"lvl-1a": "Result 1",
"lvl-1b":{
"lvl-2a": "Result 2",
"lvl-2b": {
"lvl-3a": "Result 3"
}
}
}
目前,这是该想法最接近的实现。事实证明,它适合解决我的问题,但由于其缺点,这并不是一个通用的解决方案。
缺陷:
说明:
parseObject - 处理一个对象,检查是否有任何进一步的段落。
parseValue - 将字符串转换为数字或返回字符串。
levelSeparator - 将字符串分割成单独的对象。不深入
buildAnswer - 将结果转换回字符串。移入一个单独的方法,因为末尾有一个额外的“,”需要删除(不能在没有错误的情况下在递归中实现)。
PS我忘了澄清输入数据不包含\n\t的条件。
我会制作类似这个算法的东西并将所有内容存储在 HashMap 中。
我们从 json 行中删除所有换行符 (/n),以便于进一步工作。
然后用规则进行递归就更容易了:
方向大致是这样的