【问题标题】:how to remove quotation marks around array in node?如何删除节点中数组周围的引号?
【发布时间】:2021-06-06 02:20:44
【问题描述】:

我在 python 中处理了一个数据并将文件保存为 JSON 格式。

但是,当我在 node.js 中使用 JSON 文件时,我遇到了问题 这是

JSON 文件如下所示。

{
    "title": "Christmas Eggnog",
    "ingredients": "['whites', 'yolks', 'sugar', 'rye', 'whiskey', 'brandy', 'rum', 'cream']",
    "id": "05zEpbSqcs9E0rcnCJWyZ9OgdH0MLby"
},

成分必须是一个普通数组,但它是一个用引号括起来的数组。 最终导致无法按预期读取此 json 文件。

{
    "title": "Christmas Eggnog",
    "ingredients": ["whites", "yolks", "sugar", "rye", "whiskey", "brandy", "rum", "cream"],
    "id": "05zEpbSqcs9E0rcnCJWyZ9OgdH0MLby"
},

我想得到如下的日志值。当我在节点中读取这个 JSON 文件时。

const fs = require('fs');

let predata = fs.readFileSync('./data/testonce.json')
let data = JSON.parse(predata)
let newData = [];
data.forEach((d) => {
    newData.push((d) => {
        let targetarray = d.ingredients.split(',')
        return {...d, ingredients: targetarray }
    })
})

console.log(newData[0])
//"whites"

我无法得到字符串“white”,因为节点不理解这样一个事实: "['whites', 'yolks', 'sugar', 'rye', 'whiskey', 'brandy', 'rum', 'cream']" 是一个数组。 节点将其视为一个长字符串。

如何把这个字符串变成普通数组?

编辑)

我的python代码如下。

import pandas as pd

df = pd.read_csv('./test.csv')

ingredients = df['ingredients']

for i in range(len(ingredients)):
    ingredients[i]=str(ingredients[i])[1:-1]

ingredients

df['ingredients']=ingredients

df.to_csv ('./datatest.csv', index = False, header=True)

在这之后,我在这个网站上使用了 csv->json 格式化程序。 https://csvjson.com/[![enter这里有图片描述]1]1

编辑)

这是 csv 文件链接

we.tl/t-Kw435qpNNd

看起来像这样

编辑)示例 csv 文本 这是示例 csv 文本。

标题、成分、ID 圣诞蛋酒 ,"['whites', 'yolks', 'sugar', 'rye', 'whisky', 'brandy', 'rum', 'cream']",05zEpbSqcs9E0rcnCJWyZ9OgdH0MLby "小牛肉、胡萝卜和栗子炖肉","['栗子'、'小牛肉'、'炖肉'、'肉'、'油'、'洋葱'、'大蒜'、'叶子'、'盐'、'鸡汤', '酒', '胡萝卜', '鼠尾草']",mF5SZmoqxF4WtIlhLRvzuKk.z6s7P2S 焦糖面包布丁配巧克力和肉桂,“['黄油','奶油蛋卷','质量','面包','面包皮','鸡蛋','鸡蛋','蛋黄','棕色','糖', “奶油”、“牛奶”、“香草”、“肉桂”、“肉豆蔻”、“犹太盐”、“巧克力”、“顶级”]",oQV5D7cVbCFwmrDs3pBUv2y.AG0WV26 雪莉酒 Stilton 和绿胡椒酱,“['stilton', 'cream cheese', 'peppercorns', 'brine', 'sherry']",Z9seBJWaB5NkSp4DQHDnCAUBTwov/1u 杏仁巧克力杏仁饼,“['杏仁','糖','肉桂','盐','鸡蛋','杏仁','半甜','巧克力']”,bB3GxoAplVZeoX3fzWNWyeECtQFxw6G 白酱或调味酱,,"['黄油', '面粉', '牛奶', '盐', '胡椒']",FHQAJvovVtPyKWlzgFEHgSUJsCM2Tjq

【问题讨论】:

标签: javascript node.js data-visualization


【解决方案1】:

因为它是一个字符串,所以你需要去掉你不想要的坏位,然后将剩下的字符串转换成一个数组

var list = "['whites', 'yolks', 'sugar', 'rye', 'whiskey', 'brandy', 'rum', 'cream']".replace(/[\[\]["',]/g,'').split(" ");

replace 使用正则表达式去除 " ' , [ ] 字符,split 将字符串通过剩余的空格分割并转换为数组。

console.log(list);
0: "whites"
1: "yolks"
2: "sugar"
3: "rye"
4: "whiskey"
5: "brandy"
6: "rum"
7: "cream"
length: 8
__proto__: Array(0)

【讨论】:

    【解决方案2】:

    我同意 Thierry Lathuille 解决制作人的问题。如果你想在这里修补它,我会将字符串解析为 JSON 并替换它:

    data.forEach(r => {
        r.ingredients = JSON.parse(r.ingredients);
    }
    

    【讨论】:

      【解决方案3】:

      const json = {
          "title": "Christmas Eggnog",
          "ingredients": "['whites', 'yolks', 'sugar', 'rye', 'whiskey', 'brandy', 'rum', 'cream']",
          "id": "05zEpbSqcs9E0rcnCJWyZ9OgdH0MLby"
      }
      
      const ingredients = json.ingredients.substr(1, json.ingredients.length -2)
      const ingredientsList = ingredients.split(', ').map(item => item.substr(1, item.length -2))
      
      
      
      console.log(ingredientsList)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-04-19
        • 2019-03-01
        • 2020-07-03
        • 1970-01-01
        • 2019-11-27
        • 2013-09-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多