【问题标题】:Parsing request.body to string then create JSON将 request.body 解析为字符串,然后创建 JSON
【发布时间】:2023-03-05 13:34:01
【问题描述】:

我现在被困在将字符串解析为 json 类型。我已将请求正文归结为字符串,但似乎无法正确解析数据。

我有什么:

String to parse:
uniq1.data.data.data 7 bleep\nuniq2.data.data.data 4 boop\nuniq3.data.data.data 7 bleep\ntets4.data.data.data 7 bleep\nuniq5.data.data.data 7 bleep\ntest6.data.data.data 7 fgws

希望将字符串转换为具有以下结构的 JSON,以便我可以将其插入 mongoose db:

name: uniq1
typeID: 7
type: bleep

name: uniq2
typeID: 4
type: boop

name: tets4
typeID: 7
type: bleep

目前我正在尝试用逗号替换所有 '\n' 新行,以便我可以使用逗号解析数据,但是当我执行 bodyText.replace( new RegExp( "\n", "g" ) ,",") 字符串中没有任何变化。我也在想可能有更好的方法来解决这个问题,我没有想到。

感谢您的帮助!

【问题讨论】:

    标签: javascript node.js json parsing


    【解决方案1】:

    你可以试试这个-

    let str = "uniq1.data.data.data 7 bleep\nuniq2.data.data.data 4 boop\nuniq3.data.data.data 7 bleep\ntets4.data.data.data 7 bleep\nuniq5.data.data.data 7 bleep\ntest6.data.data.data 7 fgws";
    
    
    const arr = str.split("\n");
    
    const json = arr.reduce((acc, curr) => {
    	const [first, typeID, type] = curr.split(" ");
    	const [name] = first.split('.');
    	
    	acc.push({name: name, typeID, type});
    
    	return acc;
    }, []);
    
    console.log(json);
    .as-console-wrapper{min-height: 100% !important; top: 0;}

    注意:我找到了类似 bleep\uniq5 的东西,而不是 bleep\nuniq5。如果 request.body 发送给你的正是这个,那你就倒霉了。

    【讨论】:

    • 谢谢 Sajeeb,我试了一下,我的“类型”结果是“以下:类型:'bleep\\nuniq1.data.data.data'}] 看起来拆分不起作用出于某种原因。另外我在记录的 json 中只有 1 个元素。有什么建议吗?
    • 你能分享一下确切的字符串吗?
    • 我不能分享确切的字符串,因为它有数据,但看起来完全一样我只是用单词 data1/2/3/4 替换了字段:data1.data2.data3.data4 7 ltm_apm\ndata1.data2.data3.data4 4 完整\ndata1.data2.data3.data4 7 ltm_apm\ndata1.data2.data3.data4 7 ltm_apm\ndata1.data2.data3.data4\ndata1.data2.data3.data4 7 ltm_apm
    • 我认为与 /n 的查找有关,如果我在你的函数中过去的字符串工作正常,但字符串发生了一些事情可能会创建一个 //n
    • 是的,我用 nBody.replace("\\n\"}", ""); 更新了代码,它有效:)。非常感谢!
    【解决方案2】:
    const a = "uniq1.data.data.data 7 bleep\nuniq2.data.data.data 4 boop\nuniq3.data.data.data 7 bleep\ntets4.data.data.data 7 bleep\nuniq5.data.data.data 7 bleep\ntest6.data.data.data 7 fgws";
    const b = a.split("\n");
    const c = b.map((el) => el.split(" "));
    const d = c.map(([name, typeID, type]) => {
      return { name, typeID, type };
    });
    console.log(d);
    

    b 将正文分成几行。 c 将每一行拆分为一个数组,除以每个空格。 d 将每一行的数组映射到带有键的对象中。

    我稍微改变了输入。 \uniq5这部分看起来不一致,我认为应该是\nuniq5。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-14
      • 2017-06-16
      • 2020-03-27
      • 1970-01-01
      • 2012-10-16
      相关资源
      最近更新 更多