从api获取json数据 - >将属性中的html解析为新的对象结构

时间:2016-10-18 06:36:28

标签: javascript jquery json

我有一个非常具体的问题。我正在为内部文档管理系统构建一个自定义前端,我使用DMS的JSON-API得到一些日期,但需要为前端获取更多参数。 与软件一起工作的团队同意对这些值使用现有的文本参数“描述”,并开始在大多数文档的开头添加像“”这样的块。

我现在正在使用jquery和monkberry在一个简单的前端。这主要是有效的,但我的同事希望有更多功能...他们最希望的是一个文件夹结构,至少有2个级别。 我告诉他们添加属性参数“folder =''”并填写他们从计算机知道的结构,给出示例“folder ='topfolder / subfolder'”。现在我需要以某种方式解析它:D 解析这样的结构的最佳方法是什么:

{
  "documents": [
    {
      "name": "Document A",
      "description": "<attribute folder='topfolderA/subfolder1' visible='' tags='' />This is just a text",
      "scope": "Public",
      "id": "9fcf8270d6d546419a555c4c6fd0ccd5"
    },
    {
      "name": "Document B",
      "description": "<attribute folder='topfolderB/subfolder2' visible='' tags='' />This is just the normal descriptioon Text",
      "scope": "Public",
      "id": "331338eb001c4a48ae3bb164653ae596"
    },
    {
      "name": "Document C",
      "description": "No description written yet",
      "scope": "Private",
      "id": "331338eb001c422easeeseessa3ae596"
    }
  ],
  "about": {
    "roles": [
      "Admin",
      "Author"
    ]
  }
}

到我可以迭代的对象/数组结构,比如

- folder A
--- subfolder 1
------ Document I
--- subfolder 2
------ Document II
--- Document III
--- Document IV

- folder B
--- subfolder 3
------ Document V
------ Document VI
--- subfolder 4
------ Document VII
--- Document VIII

(每个文档对象包含数据值)

有关如何在vanilla js和/或jQuery中执行此操作的任何想法? :)

提前致谢

托马斯

1 个答案:

答案 0 :(得分:0)

我认为您可以在解析时进行简单的正则表达式搜索。

一些示例代码段:

 const regex = /folder\='([a-z,A-Z,0-9,\/]*)'/g;
 const str = `<attribute folder='topfolderA/subfolder1' visible='' tags='' />`;
 var m = regex.exec(str);

mresult array,对于示例,它看起来像["folder='topfolderA/subfolder1'", "topfolderA/subfolder1"]。数组的第一个元素是整个正则表达式匹配,以下索引中的元素是我们保存的paranthesized匹配。我们可以使用()来保存匹配,同时进行正则表达式搜索。

一旦你有了这种情况下的路径:

 var path = m[1];
 var structure = path.split('/');
 //structure array would have sequence of folders and subfolders you'd have to create.

我保存了正则表达式here的演示。随意玩它并修改它以满足您的需求。我使用的正则表达式/folder\='([a-z,A-Z,0-9,\/]*)'/g基本上查找字符串"folder",后跟字母数字或正斜杠(文件夹结构也可以包含其他内容,您可以在[]中定义它。我环绕我们需要访问此路径的()文件夹路径。结尾处的标记g表示搜索是全局的。您还可以添加标记i来进行匹配不区分大小写.javascript中正则表达式的良好起点是MDN docs