【问题标题】:Node Js Acessing a Jason FileNode Js 访问 Json 文件
【发布时间】:2022-01-24 20:07:34
【问题描述】:

仍然是 JSON 的新手,虽然我搜索了网络并创建了一个函数来创建一个 init 文件(如果不存在),但我将空白以进行搜索并检索新现有文件的数据或我如何添加新条目或更新新条目

到目前为止,我可以读取文件并在控制台日志中导出 resits,因此我知道分配工作,它是一个全局变量,因此数据应该保留在读取文件循环之外,但是当我稍后尝试访问它时使我将从中提取数据并用于稍后更新的本地数组读取为未定义。

fs.readFile(path, 'utf8', (error, data) => {
    if(error){
      console.log(error);
      return;
    }
    //console.log(JSON.parse(data));
    JSONData = JSON.parse(data);
    for (let i = 0; i < JSONData.length; i++) {
      console.log(i+": ["+JSONData[i].unique+"] "+JSONData[i].name);
    }
});//fs.readFile
  var playerKey = "KuroTO";
    playerKey = playerKey.toLowerCase();
    
    for (let i = 0; i < JSONData.length; i++) {
      if (JSONData[i].unique.toLowerCase() == playerKey){
        console.log("["+i+"] "+JSONData[i].unique.toLowerCase()+": "+playerKey);
        PlayerCard1.push(JSONData[i].userid);//0
        PlayerCard1.push(JSONData[i].username);//1
        PlayerCard1.push(JSONData[i].unique);//2
        PlayerCard1.push(JSONData[i].name);//3
        PlayerCard1.push(JSONData[i].avatarurl);//4
        PlayerCard1.push(JSONData[i].level);//5
        PlayerCard1.push(JSONData[i].Rank);//6
        PlayerCard1.push(JSONData[i].henshined);//7
        PlayerCard1.push(JSONData[i].Strength);//8
        PlayerCard1.push(JSONData[i].Perception);//9
        PlayerCard1.push(JSONData[i].Endurance);//10
        PlayerCard1.push(JSONData[i].Wisdom);//11
        PlayerCard1.push(JSONData[i].Intelligence)//12;
        PlayerCard1.push(JSONData[i].Luck)//13;
        PlayerCard1.push(JSONData[i].Agility)//14;
        PlayerCard1.push(JSONData[i].Flexability)//15;
        PlayerCard1.push(JSONData[i].RatedSpeed)//16;
      };//if unique matches
    };//for
    

这是我试图做的伪代码概念 if (JSONData.stringify.unique == {SearchUID}){toonname = JSONData.stringify.name;}

据我了解,你不能真正追加,只是用新数据重新重写文件,我想我可以自己解决这个问题,一旦我能弄清楚如何将文件变成一个数组,我可以像上面那样搜索

【问题讨论】:

    标签: node.js json discord.js file-access


    【解决方案1】:

    要读取 JSON,只需要文件。

    JSON:

    {
        "key": "H"
    }
    

    JS:

    let jsonFile = require("./path/to/json");
    console.log(jsonFile.key); // H
    

    编辑同样简单。

    let jsonFile = require("./path/to/json");
    jsonFile.key = "A" 
    console.log(jsonFile.key) // A
    

    保存编辑需要使用文件系统:

    const fs = require("fs")
    let jsonFile = require("./path/to/json");
    jsonFile.key = "A" 
    // first argument is the file path
    // second argument is the JSON to write - the file is overwritten already 
    // due to above, so just JSON.stringify() the required file.
    // third argument is an error callback
    fs.writeFile("./path/to/jsonFile", JSON.stringify(jsonFile), (err) => {
        if (err) throw new Error(err);
    });
    

    如果你愿意,这也可以用来稍微清理你当前的初始化函数,但这当然取决于你。

    【讨论】:

    • 如果我的文件基本上是几个关联数组,即 [{"name":"Lexx Allolia", "Rank":"Rider"},{"name":"Dan Kuroto {Bugster}", "Rank":"Rider"},{"name":"Panda Blecker","Rank":"6th Ranger"}]
    • 是的,但是您必须迭代数组并使用 jsonFile[0][index]["name"] = value(0 应该是 JSON 中数组的索引,所以 0 或其他键/索引是,即 [{name: "name1"}, {"name": "name2"}]如果我理解正确,将被编辑为jsonFile[0]["name"] = "name1_new" 或其他内容
    • 是的,所以 JSONFile 只是一个普通的关联数组,我像这样处理它,然后我使用 stringify 将它变成一个字符串,并且基本上覆盖了源文件?输出将是正确的新行格式,因为当我读取默认值时,如果我的 init 函数没有创建任何文件,则它的全部是一行而不是看起来很漂亮
    • JSON.stringify() 使它成为一个长行,如下所示:i.imgur.com/hiq1GAb.png 如果您想正确阅读,请尝试使用JSON.parse()console.log()
    猜你喜欢
    • 1970-01-01
    • 2018-06-22
    • 2021-05-31
    • 1970-01-01
    • 1970-01-01
    • 2019-09-11
    • 1970-01-01
    • 1970-01-01
    • 2018-10-01
    相关资源
    最近更新 更多