如何使用javascript将字符串转换为json?(像A//a1、A//a2、A//a3//a31..)

如何使用javascript将字符串转换为json?(像A//a1、A//a2、A//a3//a31..),javascript,json,Javascript,Json,如何使用javascript或jQuery将字符串转换为JSON?我想了一整天,但我没有一个好主意 此任务是在客户端(ASP.Net)中动态创建treeview。我的想法是将字符串转换为对象并转换为JSON类型。(String->object->JSON)我试过了,但是日子一去不复返了。像A->a3->a31这样再构造2个深度是很困难的 字符串是 var sString = "A//a1,A//a2,A//a3//a31,A//a3//a32,B,C//c1,C//c2"; JSON格式是

如何使用javascript或jQuery将字符串转换为JSON?我想了一整天,但我没有一个好主意

此任务是在客户端(ASP.Net)中动态创建treeview。我的想法是将字符串转换为对象并转换为JSON类型。(String->object->JSON)我试过了,但是日子一去不复返了。像
A->a3->a31
这样再构造2个深度是很困难的

字符串是

var sString = "A//a1,A//a2,A//a3//a31,A//a3//a32,B,C//c1,C//c2";
JSON格式是

{
“标题”:“A”,
“密钥”:“1”,
“文件夹”:正确,
“儿童”:[{
“标题”:“a1”,
“键”:“2”
}, {
“标题”:“a2”,
“键”:“3”
}, {
“标题”:“a3”,
“密钥”:“4”,
“文件夹”:正确,
“儿童”:[{
“标题”:“a31”,
“键”:“5”
}...
}]

}
我相信这可以在没有递归的情况下完成:

var string=“A//a1、A//a2、A//a3//a31、A//a3//a32、B、C//c1、C//c2”;
//扎根
var root=string.split(',');
//我们将把它附加到每个节点,并使其不断增加
var-key=1;
//最终结果将出现在这个对象中
var结果=[];
//通过循环找到根
根.forEach(函数(根){
//把所有的孩子都带走
var items=root.split('/');
var父项=结果;
//循环浏览可用的子项
项目。forEach(功能(项目,i){
//查找树中是否存在当前项
var child=getChild(父项,项);
如果(!child){
儿童={
标题:项目,
钥匙:钥匙++
}
//这将确保当前节点仅为文件夹
//如果有更多的孩子
如果(i
console.log(JSON.stringify(解析(“A//a1,A//a2,A//a3//a31,A//a3//a32,B,C//c1,C//c2”),null,2));

其结果是:

[
  {
    "title": "A",
    "key": 1,
    "children": [
      {
        "title": "a1",
        "key": 2
      },
      {
        "title": "a2",
        "key": 3
      },
      {
        "title": "a3",
        "key": 4,
        "children": [
          {
            "title": "a31",
            "key": 5
          },
          {
            "title": "a32",
            "key": 6
          }
        ],
        "folder": true
      }
    ],
    "folder": true
  },
  {
    "title": "B",
    "key": 7
  },
  {
    "title": "C",
    "key": 8,
    "children": [
      {
        "title": "c1",
        "key": 9
      },
      {
        "title": "c2",
        "key": 10
      }
    ],
    "folder": true
  }
]

尝试下面的代码。我使用关联数组存储已处理的文件夹,以便更快地查找

我希望它能帮助你

var sString=“A//a1,A//a2,A//a3//a31,A//a3//a32,B,C//c1,C//c2”;
var sArr=sString.split(“,”;//我们将用逗号分割它,以便可以遍历它的项。
var output=[];//最终结果将存储在此处。
var hash={};//它用于跟踪itemObjectect的位置,以便更快地查找。
var counter=1;//其值将用于分配给键;
对于(变量i=0;iconsole.log(JSON.stringify(output,null,2));
不是对您的问题的直接回答,但可能会给您一些想法。“递归”是这里的关键词。您是想将JSON转换为该字符串格式,还是相反?这很混乱,因为两者都是字符串。@Rorymcrossan“将字符串转换为JSON”让我觉得OP想要转换“A//a1”串成一个JSON字符串。这也是我的想法,但是我只是想仔细检查一下。@安德烈亚斯,我不会认为这种区分是有用的,因为OP格式的格式是有效的。JSON一旦被严格化。这是黄金。很好。非常感谢。我明天会尝试它。我的区域现在是晚上,我现在不能做。谢谢!@ Chyyjang-根据您的评论,我已经更改了代码以避免使用箭头函数。@31piy它正在工作!谢谢!但我不希望此..!每个节点分开..我希望'A//a1,A//a2'转换为'A//a1,a2',然后转换为JSON类型..@cherryJang--答案与您在帖子中提到的JSON表示形式相匹配。如果您有不同的要求,请将其作为新任务发布ion.非常感谢!我明天会试试!我的区域现在是晚上,我现在不能做。谢谢!非常感谢!我现在试过了..但我有错误..!我的标签是“T1a//Ch1//OP01,T1b//Ch1/
[
  {
    "title": "A",
    "key": 1,
    "children": [
      {
        "title": "a1",
        "key": 2
      },
      {
        "title": "a2",
        "key": 3
      },
      {
        "title": "a3",
        "key": 4,
        "children": [
          {
            "title": "a31",
            "key": 5
          },
          {
            "title": "a32",
            "key": 6
          }
        ],
        "folder": true
      }
    ],
    "folder": true
  },
  {
    "title": "B",
    "key": 7
  },
  {
    "title": "C",
    "key": 8,
    "children": [
      {
        "title": "c1",
        "key": 9
      },
      {
        "title": "c2",
        "key": 10
      }
    ],
    "folder": true
  }
]