Javascript 将原始文本转换为JSON数据

Javascript 将原始文本转换为JSON数据,javascript,json,parsing,jq,Javascript,Json,Parsing,Jq,我试图实现一个解析器,将原始文本数据转换为JSON格式。案文如下 (举例) #菜单名 ##节名 ###项目名称 >描述 >价格 >图像URL(可选) ###项目名称2 >描述 >价格 >图像URL(可选) 元素的顺序将按给定的顺序排列 我想要的理想输出如下: { name: "menu name", sections: [ { name: "Section name", items: [{ name: "item name", de

我试图实现一个解析器,将原始文本数据转换为JSON格式。案文如下

(举例)

  • #菜单名
  • ##节名
  • ###项目名称
  • >描述
  • >价格
  • >图像URL(可选)

  • ###项目名称2

  • >描述
  • >价格
  • >图像URL(可选)
元素的顺序将按给定的顺序排列

我想要的理想输出如下:

{
 name: "menu name",
 sections: [
  {
     name: "Section name",
     items: [{
        name: "item name",
        description: "description",
        price: 23.00
     },
     {
        name: "item name",
        description: "description",
        price: 43.00
     },
    ]
   }
 ]
}
注意:每个部分可以有多个项目,每个菜单可以有多个部分。因此,应保持顺序,即如果出现新的部分,则下面的项目现在应成为该部分的一部分


我尝试了一个使用字符串解析的解决方案,效果很好,但我想知道执行此任务的标准方法。

因为预期的输出是JSON,所以使用面向JSON的工具(例如)可能有意义。当然有许多不同的可能方法,但这里有一种简单、直接、易于扩展,并且在某些方面易于理解,至少对于熟悉JSON查询语言的人来说是如此

下面的程序将为每个“菜单”(即每次出现“#菜单名”行)生成一个JSON对象

菜单.jq 调用 上面使用了
输入
,因此
-n
命令行选项至关重要:

jq -n -f menus.jq input.txt
输出 使用示例输入:

{
  "name": "Menu Name",
  "sections": [
    {
      "name": "Section Name",
      "items": [
        {
          "name": "Item Name",
          "description": "Description",
          "price": "Price",
          "url": "Image URL (optional)"
        },
        {
          "name": "Item Name 2",
          "description": "Description",
          "price": "Price",
          "url": "Image URL (optional)"
        }
      ]
    }
  ]
}

没有解析自定义文本格式的标准方法。您可以编写自己的函数,在其中以字符串格式创建json,一旦完成,您就可以将其解析为json。您已经做了什么吗?让我们看看。从你的原始文本中,我看到了一个模式,如果这个模式是恒定的,也许有办法。你可以使用一个PEG,比如
{
  "name": "Menu Name",
  "sections": [
    {
      "name": "Section Name",
      "items": [
        {
          "name": "Item Name",
          "description": "Description",
          "price": "Price",
          "url": "Image URL (optional)"
        },
        {
          "name": "Item Name 2",
          "description": "Description",
          "price": "Price",
          "url": "Image URL (optional)"
        }
      ]
    }
  ]
}