node js - 如何将json文件表示为var?

时间:2016-05-21 02:10:53

标签: javascript node.js

我正在编辑我的帖子,因为我想澄清帖子的含义, 真正的问题不是我写的代码或关于相等运算符的代码,而是关于在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'值是假的?

感谢。

4 个答案:

答案 0 :(得分:0)

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

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

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

ob1.a === ob2.a

答案 1 :(得分:0)

实际上并没有"文件" Node中的对象,但您可以将路径作为参数发送到JSON文件。或者,更好的是,将对象本身作为参数发送。

答案 2 :(得分:0)

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

  1. JavaScript对象是包含键值对的本机JavaScript类型,其文字形式用大括号括起来,例如{a: 1}

    < / LI>
  2. JSON 是基于字符串的表示,松散地基于JavaScript文字对象语法,例如字符串'{"a": 1}'

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

  4. 变量是一种保存任何JavaScript类型的方法。这可能是一个JavaScript对象,也可能是一个字符串,该字符串可能是JSON。

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

    < / LI>

    所以

      

    其他开发人员要求我发送一些函数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文件中”,意思是硬盘上的物理文件,那么你将不得不使用node的文件I / O API来编写物理文件。然后,您可以将文件的名称传递给另一个函数。但是,当你已经拥有JSON和/或JavaScript对象并且可以直接传递它时,为什么要这样做呢?

答案 3 :(得分:0)

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

下面的函数接受一个json对象,将其写入文件&amp;返回文件的路径。

function createJSONFile(jsonObject) {
  var jsonPath = './jsonFileName.json';
  var fs = require('fs');
  fs.writeFileSync(jsonPath, JSON.stringify(jsonObject));
  return jsonPath;
}

此外,当您从文件中读取json数据时,虽然内容相同,但您不能指望您在json文件中保存的对象与您阅读的对象相同。因为,它们现在是两个不同的对象。

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