【问题标题】:Need an algorithm to convert string to JSON with javascript需要一种算法来使用 javascript 将字符串转换为 JSON
【发布时间】:2014-09-02 17:06:50
【问题描述】:

我正在调用一个 api 来获取一个 ID 的历史记录,它返回一个如下所示的字符串对象:

09304790130000--09304790090000
09304790130000--09304790120000
09304790090000--09304790010000
09304790120000--09304790020000
09304790120000--09304790030000
09304790120000--09304790110000
09304790110000--09304790050000
09304790010000--042322003
09304790020000--042322002
09304790030000--042322001
09304790050000--042322004

如果我能弄清楚如何使用 JavaScript 将其转换为 JSON,我可以用它做更多事情,所以它看起来像这样:

{
    "name": "09304790130000",
    "children": [{
        "name": "09304790090000",
        "children": [{
            "name": "09304790010000",
            "children": [{
                "name": "04 2322-003"
            }]
        }]
    }, {
        "name": "09304790120000",
        "children": [{
            "name": "09304790020000",
            "children": [{
                "name": "04 2322-002"
            }]
        }, {
            "name": "09304790030000",
            "children": [{
                "name": "04 2322-001"
            }]
        }, {
            "name": "09304790110000",
            "children": [{
                "name": "09304790050000",
                "children": [{
                    "name": "04 2322-004"
                }]
            }]
        }]
    }]
}

有没有一种算法可以构建我需要的对象,而不管“树”变得多么复杂?

为清楚起见编辑: 字符串中的“--”表示ID的关系。左侧 ID 是短划线右侧 ID 的父级。所以我提供给 api 的 ID,“09304790130000”有两个孩子,每个孩子都可以有更多的孩子,直到他们达到当前的 9 位 ID。

【问题讨论】:

  • 在 ECMAScript 中,“字符串对象”是矛盾的。
  • @amphetamachine:实际上,没有——JavaScript (ECMAScript) 既有字符串原语,也有字符串对象。
  • 那么每一行都是前一行的子行吗?每行只有一个代码吗?
  • 你是把它寄到别的地方吗? JSON 只是字符串的一种标记格式。我认为您真正想要的是将获得的字符串转换为 JavaScript 对象或数组(如果您进一步发送,则可以轻松地将其作为 JSON 返回)?
  • 那么04 2322-003 来自哪里?您需要解释映射应该如何工作(在此过程中,您可能只是回答自己的问题)。

标签: javascript json algorithm loops recursion


【解决方案1】:

这里有一个自定义格式的输入。您需要处理的是regular expression。 (尽管您的格式可能很简单,以至于不需要完整的正则表达式函数,而是拆分分隔符?)您需要做的是分解输入字符串并循环遍历组件并将它们放入您想要的数据结构中(其中听起来像是某种树)。高级伪代码类似于:

Take line of input.
Break on "--".
Create root node from the left side if the tree is empty, otherwise just find the existing node.
Add child from right side to the parent.

将其转换为您想要的 JSON 格式可能还需要编写一个函数来迭代树并以该格式写入一个字符串...尽管如果您使用现有的库和数据类型,这可能已经存在。

编辑:要扩展最后一位,要获得您想要的格式意味着树的Pre-order traversal。在每个步骤中,您只需将格式和名称添加到 JSON 字符串。 One of these libraries 应该有你需要的能力,当然如果你需要的话你可以自己写一个树形数据结构和遍历函数。

【讨论】:

  • 感谢您的意见,尤其是在其他人经常对语义提出争议的情况下,但让我挂断电话的是迭代循环。
猜你喜欢
  • 2018-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-04
  • 1970-01-01
  • 1970-01-01
  • 2020-11-27
相关资源
最近更新 更多