Javascript NodeJS-如何将json文件表示为var?

Javascript NodeJS-如何将json文件表示为var?,javascript,node.js,Javascript,Node.js,我编辑我的帖子是因为我想澄清帖子的含义, 真正的问题不是关于我编写的代码或等式运算符,而是关于在var中表示json文件。 我将尝试以不同的方式再次询问,我需要在Node js中实现一个函数,该函数获取json字符串作为参数,将此json字符串存储在json文件中,并将此json文件发送给其他函数, 我该怎么做 其他开发人员要求我向函数发送一个json文件, 还是表示json文件的变量? 我该怎么做? 我可以在节点js中用变量表示文件,还是只保存json obj var ob1 = requi

我编辑我的帖子是因为我想澄清帖子的含义, 真正的问题不是关于我编写的代码或等式运算符,而是关于在var中表示json文件。 我将尝试以不同的方式再次询问,我需要在Node js中实现一个函数,该函数获取json字符串作为参数,将此json字符串存储在json文件中,并将此json文件发送给其他函数, 我该怎么做


其他开发人员要求我向函数发送一个json文件, 还是表示json文件的变量? 我该怎么做? 我可以在节点js中用变量表示文件,还是只保存json obj

var ob1 = require('./test.json');
var ob2 = {"a" : "b"};

var b = (ob1 === ob2)
当然,test.json包含与ob2对象中完全相同的json。 当我在intellij中调试这段代码时,ob1和ob2似乎完全相同。 两个对象具有相同的内容

那么为什么“b”值是假的呢


谢谢。

两个对象
ob1
ob2
可能具有相同的内容,但它们仍然是两个不同的对象

obj1===obj2
不比较对象的内容,而是比较它们的引用。这些参考文献不一样,因此比较结果是否定的

您必须自己实现对象内容的比较,例如:

ob1.a === ob2.a

节点中实际上没有“file”对象,但可以将JSON文件的路径作为参数发送。或者,最好将对象本身作为参数发送。

您需要非常清楚您的术语和概念

  • JavaScript对象是一种本机JavaScript类型,它包含键值对,文本形式用小括号括起来,如
    {A:1}

  • JSON是一种基于字符串的表示,它松散地基于JavaScript文本对象语法,例如字符串
    '{“a”:1}'

  • JSON文件是包含JSON的文件(本地文件系统中带有文件名的物理文件)。在节点中,可以使用
    require('foo.json')
    读入并转换为JavaScript对象

  • 变量是保存任何JavaScript类型的一种方法。可以是JavaScript对象,也可以是字符串,该字符串可以是JSON

  • 参数是函数定义的一部分,表示将传入的内容(“形式参数”),或调用时传递给函数的内容

  • 所以

    其他开发人员要求我向函数发送一个json文件

    我不确定是否有其他开发人员要求您发送“JSON文件”。如果这真的是他们的意思,你可以传递一个文件名。如果您向我们展示开发人员要求您将“JSON文件”传递给的函数,我们将能够理解它们的真正含义

    还是表示json文件的变量

    他们要求您作为参数(而不是“变量”)发送的内容更有可能是(1)JavaScript对象,或者(2)JSON字符串。如果他们要求您发送一个JavaScript对象,并且您希望发送一个对应于JSON文件内容的JavaScript对象,那么您可以使用
    require('foo.JSON')
    读入JSON文件,该文件将读入该文件,同时转换为JavaScript对象,然后您可以传递该对象

    如果他们要求你发送“JSON”,很可能他们使用了不正确的术语,实际上是指你发送一个JavaScript对象,在这种情况下,请参见上文。如果他们真的是指“JSON”(表示字符串),那么如果你已经有了JSON字符串,你可以按原样传递它;或者,如果您有一个JavaScript对象,并且需要将其作为JSON传递(例如,将其传递给类似AJAX的接口),那么您可以使用
    JSON.stringify
    将JavaScript对象转换为JSON

    在您的特定情况下,您正在读取一个JSON文件并创建一个JavaScript对象
    obj1
    。然后,您将使用文本对象表示法
    obj2
    创建另一个JavaScript对象。如果要比较深度相等,则不能使用
    =
    ===
    来比较对象的标识,而且这两个对象具有不同的标识,即使它们具有相同的键/值对,因此您必须使用提供深度相等检查的库,或者编写自己的库

    它是关于用var表示json文件的

    我不知道你说的在变量中“表示”JSON文件是什么意思。重复一下,您可以使用
    require('foo.JSON')
    读取JSON文件,它将返回一个可以分配给变量的JavaScript对象;或者,您可以使用标准节点文件I/O API以文本形式读入JSON文件,然后自己使用
    JSON.parse
    将其转换为JavaScript对象

    我需要在Node js中实现一个函数,该函数获取json字符串作为参数,将该json字符串存储在json文件中,并将该json文件发送给其他函数,我应该如何做到这一点

    我猜您的意思是“将JSON字符串作为参数”。“将此json文件发送给其他函数”最有可能的解释实际上是“将相应的JavaScript对象传递给其他函数”。如果那是你想做的,那么

    function takeJsonAndSendObject(json) {
      otherFunction(JSON.parse(json));
    }
    

    如果出于某种原因,您确实希望“将此json字符串存储在json文件中”,即硬盘上的物理文件,那么您必须使用节点的文件I/O API来编写物理文件。然后可以将文件名传递给另一个函数。但是,当您已经拥有JSON和/或JavaScript对象并且可以直接传递它时,为什么要这样做呢?

    NodeJS中没有
    文件
    对象。如果要将文件传递给另一个函数,请将该文件的路径传递给需要该文件的函数。然后从该函数中,使用
    fs
    模块读取文件内容

    低于func
    function createJSONFile(jsonObject) {
      var jsonPath = './jsonFileName.json';
      var fs = require('fs');
      fs.writeFileSync(jsonPath, JSON.stringify(jsonObject));
      return jsonPath;
    }
    
    var object = {name: 'test'};
    var filePath = createJSONFile(object);
    var json = require(filePath);
    
    object === json // false
    
    //to check the equality of the content, you need to use `JSON.stringify`.
    JSON.stringify(object) === JSON.stringify(json) // true