如何在JavaScript中将纯文本转换为Json对象

如何在JavaScript中将纯文本转换为Json对象,javascript,jquery,html,json,Javascript,Jquery,Html,Json,如何在Javascript中将纯文本转换为JSON值。我试了很多。但无法按预期获取。有人帮忙吗 从命令行获取的实际字符串,该命令行正在从javascript执行命令 Net State: OFFLINE Net Err: Net Time: 0 Current Sample: 0 Sample #0 Sample Role: OFFLINE Sample Status: DISABLED Sample Errors: ERROR STATUS

如何在Javascript中将纯文本转换为JSON值。我试了很多。但无法按预期获取。有人帮忙吗

从命令行获取的实际字符串,该命令行正在从javascript执行命令

Net State: OFFLINE
Net Err:
Net Time: 0

Current Sample: 0

Sample #0
        Sample Role: OFFLINE
        Sample Status: DISABLED
        Sample Errors: ERROR STATUS
        Test Mode: FAILED
        Test Status: NOT RUNNING      

Sample #1
        Sample Role: ONLINE
        Sample Status: ENABLED
        Sample Errors: NO ERROR
        Test Mode: ENABLED
        Test Status: RUNNING
预期的JSON值

{
  "Net_State": "OFFLINE",
  "Net_Err": "",
  "Net_Time": 0,
  "Current_sample": 0,
  "Sample": [
        {
      "Sample_Role": "OFFLINE",
      "Sample_Status": "DISABLED",
      "Sample_Errors": "ERROR STATUS",
      "Test_Mode": "FAILED",
      "Test_Status": "NOT RUNNING"
    },
    {
      "Sample_Role": "ONLINE",
      "Sample_Status": "ENABLED",
      "Sample_Errors": "NO ERROR",
      "Test_Mode": "ENABLED",
      "Test_Status": "RUNNING"
    }
  ]
}
我尝试了下面的代码,但是我怎么能很快编写它呢

var res = response.split(/\r?\n/);
res = res.filter(function(e){return e});
var myObject = {
node : []
};
var nodeObject =[];
var i =0, j=0, k = 0, l=0;
var sampleArr = []
var loop = false;
for (var i = 0; i < res.length; i++) {
var itemValue = res[i]
if (itemValue.includes(':')) {
        var sp = itemValue.split(':');
        if (!loop) {
        myObject[sp.shift().trim()] = sp.join(':').trim();
    } else {
        if(nodeObject.length > 0) {
            if (j ==0) {
                myObject.node[l] = nodeObject;
                nodeObject = [];
                l = l+1;
            }
        }

        nodeObject.push({[sp.shift().trim()] : sp.join(':').trim()});
        j = j+1;
        if (k > 0 && k == j) {
        myObject.node[l] = nodeObject;
        nodeObject = [];
        }
    }
} else {
    loop = true;
    k=j;        
    j = 0;
}
}     
var res=response.split(/\r?\n/);
res=res.filter(函数(e){returne});
变量myObject={
节点:[]
};
变量nodeObject=[];
变量i=0,j=0,k=0,l=0;
var sampleArr=[]
var循环=假;
对于(变量i=0;i0){
如果(j==0){
myObject.node[l]=节点对象;
nodeObject=[];
l=l+1;
}
}
nodeObject.push({[sp.shift().trim()]:sp.join(':').trim()});
j=j+1;
如果(k>0&&k==j){
myObject.node[l]=节点对象;
nodeObject=[];
}
}
}否则{
循环=真;
k=j;
j=0;
}
}     

提前感谢。

注意:我发布此内容时,您没有发布任何代码,因此我仍在查看您的错误,以帮助您理解

好的,您的代码存在的问题(唯一的问题?)是

这就是为什么示例数组中的每个项都是一个对象数组

试图解决这个问题,但下面的代码还是更好的(如果我自己这么说的话)

const response=`Net State:OFFLINE
净误差:
净时间:0
当前样本:0
样本#0
示例角色:脱机
样本状态:已禁用
示例错误:错误状态
测试模式:失败
测试状态:未运行
样本#1
示例角色:在线
样本状态:已启用
示例错误:无错误
测试模式:已启用
测试状态:正在运行`;
让res=response.split(/\r?\n/g).filter(line=>line.trim());
设curr=null;
const result=res.reduce((acc,line)=>{
if(/\s#\d+/.test(line)){//数组项
让[key,index]=line.split(“#”);
key=key.trim();
指数=+指数;
curr={key,index};//保存键和索引
设a=acc[key]=acc[key]| |[];//如果需要,初始化数组
a[index]=a[index]| |{};//在给定索引处初始化对象
}否则{
让[key,…value]=line.split(“:”);
value=value.join(“:”).trim();
if(key.startsWith(“”)){//数组
acc[curr.key][curr.index][key.trim()]=值;
}else{//root
acc[键修剪()]=值;
}
}
返回acc;
}, {});

log(JSON.stringify(result,null,4))纯文本的格式是什么?它是一个从命令行获取值的字符串。您必须自己操作从命令行获取的字符串。(例如,添加逗号、双引号和大括号等)
我试了很多。但无法按预期获取-您尝试了什么?它在哪里失败了?您使用什么服务器端堆栈来执行此操作?@fubar更新的代码有问题我遇到了一个错误,如Uncaught TypeError:plainText.reduce不是函数如果您在上面的代码段中运行它,则不是函数-注意,在上面的代码段中,明文变量是数组我应该使用split new line转换为数组吗?答案中的代码就是这样做的正如我所说,当我创建上面的代码时,你已经发布了零代码,所以。。。让我编辑它,使其与您的代码相匹配。您在答案中“运行代码片段”时得到的输出是什么?我甚至不知道“节点”属性是什么,它不在您预期的输出中,而且它肯定与我的答案无关。。。这是您的代码可能会产生的结果-因此,不确定您还想从我这里得到什么
nodeObject.push({[sp.shift().trim()] : sp.join(':').trim()});