Javascript 如何替换json数组中json对象的一个属性,因为在nodejs中没有大量json对象?

Javascript 如何替换json数组中json对象的一个属性,因为在nodejs中没有大量json对象?,javascript,arrays,json,node.js,Javascript,Arrays,Json,Node.js,我已经在网上搜索了很多关于解析json数组的文章,或者有任何npm包可以做这件事。但是我所有的努力都白费了 我有这样一个json数组=> { "pctProjects": [ { "ID": "1", "Name": "Software Upgrade", "Desc": "GO! V1 Chapter 5- EOC Mastery Exercise", "AppId": "1", "UserId

我已经在网上搜索了很多关于解析json数组的文章,或者有任何npm包可以做这件事。但是我所有的努力都白费了

我有这样一个json数组=>

{
    "pctProjects": [
      {
        "ID": "1",
        "Name": "Software Upgrade",
        "Desc": "GO! V1 Chapter 5- EOC Mastery Exercise",
        "AppId": "1",
        "UserId": "1",
        "CreatedDate": "2008-07-30T00:00:00",
        "Score": "100",
        "SeriesID": "2",
        "IsPublished": "1",
        "PublishedLMSVariationID": "5",
        "IsPCTActive": "0",
        "IVTEnabled": "0",
        "IsActiveInSelectPopup": "1",
        "Chapter": "CH05"
      },
      {
        "ID": "2",
        "Name": "Business Venture",
        "Desc": "Exploring Volume 1 Chapter 3- TST Exercise",
        "AppId": "1",
        "UserId": "1",
        "CreatedDate": "2008-07-30T00:00:00",
        "Score": "100",
        "SeriesID": "1",
        "IsPublished": "1",
        "PublishedLMSVariationID": "7",
        "IsPCTActive": "0",
        "IVTEnabled": "0",
        "IsActiveInSelectPopup": "1",
        "Chapter": "CH03"
      }
      .
      .
      .
我使用json.parse方法遍历json数组“pctProjects”,并能够使用PublishedLMSVariationID属性找到对象,我需要用另一个值替换该属性,我使用文件系统模块函数,如appendFileSync()和writeFileSync()但使用这种方法,我必须重写其他对象数据,我不会更改这些数据,而且这种方法不是优化的,因为我可以在该数组中没有n个对象

在文件中使用replace也不能帮助我实现我的目标

还添加了我现在正在做的未经优化的代码片段

for(let item of gulpJson.pctProjects){
        // console.log(typeof touseVariationId)
        if(counter==1 && item.PublishedLMSVariationID == results[0]){
            item.PublishedLMSVariationID = results[1]
            fs.writeFileSync(path.join(dir,'PCT5_MasterPCTProjectsForGulp.json'), JSON.stringify(item,null,4));
            counter++;
        }
        else if(counter==1 && item.PublishedLMSVariationID != results[0]){
            fs.writeFileSync(path.join(dir,'PCT5_MasterPCTProjectsForGulp.json'), JSON.stringify(item,null,4));
            counter++;      
        }
        else if(item.PublishedLMSVariationID == results[0]){

            item.PublishedLMSVariationID = results[1]
            fs.appendFileSync(path.join(dir,'PCT5_MasterPCTProjectsForGulp.json'), JSON.stringify(item,null, 4));
            // break
            // fs.writeFileSync(path.join(dir,'PCT5_MasterPCTProjectsForGulp.json',null, 2), JSON.stringify(item));
        }
        else
            fs.appendFileSync(path.join(dir,'PCT5_MasterPCTProjectsForGulp.json'),","+"\n"+"\t"+  JSON.stringify(item,null, 4));
    }
问题:

  • 是否有任何方法可以替换nodejs中json数组中的one-json属性
  • 非常感谢,谢谢


    如果需要更多信息,请发表评论。

    据我所知,您是在询问是否可以在不重写整个内容的情况下在文件系统上对JSON文件进行不同的编辑。尽管我确信这是可能的,但我建议您在每次更新JSON文件时只需重写整个JSON文件。如果JSON太大,以至于太繁琐/耗时,那么最好使用某种DB(MySQL、Mongo、Firebase等)

    我的建议是按以下顺序进行:

  • 从文件中检索JSON字符串(我们称之为
    source.JSON
  • 解析JSON字符串以使用
    JSON.Parse
  • 通过在解析对象上循环并根据需要覆盖值,在解析对象中更新要更新的对象
  • 使用
    JSON.stringify
    获取字符串表示(步骤2中获得的整个对象),并用新的JSON覆盖
    source.JSON

  • 据我所知,您正在询问是否可以在文件系统上对JSON文件进行差异化编辑,而无需重写整个内容。尽管我确信这是可能的,但我建议您在每次更新JSON文件时只需重写整个JSON文件。如果JSON太大,以至于太繁琐/耗时,那么最好使用某种DB(MySQL、Mongo、Firebase等)

    我的建议是按以下顺序进行:

  • 从文件中检索JSON字符串(我们称之为
    source.JSON
  • 解析JSON字符串以使用
    JSON.Parse
  • 通过在解析对象上循环并根据需要覆盖值,在解析对象中更新要更新的对象
  • 使用
    JSON.stringify
    获取字符串表示(步骤2中获得的整个对象),并用新的JSON覆盖
    source.JSON

  • 通过使用npm文件中替换模块,我能够以优化的方式实现我的结果

    下面是我使用该模块的代码片段:

    replace.sync({
            files: path.join(dir,'PCT5_MasterPCTProjectsForGulp1.json'),
            from: results[0],
            to: results[1]
        });
    

    通过使用npm文件中替换模块,我能够以优化的方式实现我的结果

    下面是我使用该模块的代码片段:

    replace.sync({
            files: path.join(dir,'PCT5_MasterPCTProjectsForGulp1.json'),
            from: results[0],
            to: results[1]
        });
    

    如何替换json数组中json对象的一个属性,因为它在nodejs中没有大量json对象,所以不清楚您需要什么。我看到的只是一组属性数量相等的对象如果你问如何在不首先将文件加载到RAM的情况下解析文件,恐怕计算机不是这样工作的。如果不加载整个文件,对其进行更改,然后将其写回HD,则无法执行您想要执行的操作。@GeorgeBailey,我只需要替换一个json对象的一个属性,因此我只想替换文件中的该属性,而不是重写文件中的所有内容。当然,读取整个文件,更新值,那么,编写整个文件所需的时间将比打开、写入和关闭文件数百次甚至数千次要少得多…?@ChrisG,你为什么要告诉我这些,我知道这些。我要求这样做。如何在json数组中替换我的json对象的一个属性,在nodejs中没有大量的json对象,这对你的要求很不清楚。我看到的只是一组属性数量相等的对象如果你问如何在不首先将文件加载到RAM的情况下解析文件,恐怕计算机不是这样工作的。如果不加载整个文件,对其进行更改,然后将其写回HD,则无法执行您想要执行的操作。@GeorgeBailey,我只需要替换一个json对象的一个属性,因此我只想替换文件中的该属性,而不是重写文件中的所有内容。当然,读取整个文件,更新值,那么,编写整个文件所需的时间将比打开、写入和关闭文件数百次甚至数千次要少得多…?@ChrisG,你为什么要告诉我这些,我知道这些。我要求你这样做。你的“推荐”是OP已经在做的事情,正如他们在帖子中所描述的那样。@ChrisG实际上,我不认为OP正在做的就是这样。如果我错了,请纠正我,但在共享的代码中,他们一次只对一个对象进行字符串化,并将其附加到文件中,我相信这将导致生成的JSON文件是无效的JSON。对不起,你是对的,他们实际上是一个对象一个对象地写出它。。。我应该更仔细地看他们的代码。@ChiragRavindra,这有什么用,这和我现在做的一样。我只想替换一个属性,这个方法不是我想要的。@sagg1295这与您正在做的有点不同,因为写入文件是作为一个完整的JSON对象进行的,这保证了JSON文件包含有效的JSON。您的方法以增量方式添加对象,这可能会导致JSON