javascript - nodejs - Escribir objetos en el archivo con Node.js
path nodejs (4)
Basándome en lo que dijo deb2fast, también pasaría un par de parámetros adicionales a JSON.stringify () para que tenga el formato bonito:
fs.writeFile(''./data.json'', JSON.stringify(obj, null, 2) , ''utf-8'');
El segundo parámetro es una función de reemplazo opcional que no necesita en este caso, por lo que null
funciona.
El tercer parámetro es la cantidad de espacios para usar para la sangría. 2 y 4 parecen ser elecciones populares.
He buscado en todo stackoverflow / google para esto, pero parece que no puede resolverlo.
Estoy raspando los enlaces de las redes sociales de una página de URL determinada, y la función devuelve un objeto con una lista de URL.
Cuando trato de escribir estos datos en un archivo diferente, se envía al archivo como [object Object]
lugar de lo esperado: ['' https://twitter.com/#!/101Cookbooks '', '' http://www.facebook.com/101cookbooks ''] como lo hace cuando console.log()
los resultados.
Este es mi triste intento de leer y escribir un archivo en el nodo, tratando de leer cada línea (la url) y la entrada a través de una request(line, gotHTML)
llamada de función request(line, gotHTML)
:
fs.readFileSync(''./urls.txt'').toString().split(''/n'').forEach(function (line){
console.log(line);
var obj = request(line, gotHTML);
console.log(obj);
fs.writeFileSync(''./data.json'', obj , ''utf-8'');
});
como referencia: la función gotHTML
:
function gotHTML(err, resp, html){
var social_ids = [];
if(err){
return console.log(err);
} else if (resp.statusCode === 200){
var parsedHTML = $.load(html);
parsedHTML(''a'').map(function(i, link){
var href = $(link).attr(''href'');
for(var i=0; i<socialurls.length; i++){
if(socialurls[i].test(href) && social_ids.indexOf(href) < 0 ) {
social_ids.push(href);
};
};
})
};
return social_ids;
};
En mi experiencia, JSON.stringify es ligeramente más rápido que util.inspect. Tuve que guardar el objeto resultado de una consulta de DB2 como un archivo json, la consulta devolvió un objeto de 92k filas, la conversión tardó mucho en completarse con util.inspect, así que hice la siguiente prueba escribiendo el mismo objeto de registro 1000 a un archivo con ambos métodos.
JSON.Stringify
fs.writeFile(''./data.json'', JSON.stringify(obj, null, 2));
Tiempo: 3:57 (3 min 57 seg)
Formato del resultado:
[
{
"PROB": "00001",
"BO": "AXZ",
"CNTRY": "649"
},
...
]
util.inspect
var util = require(''util''); fs.writeFile(''./data.json'', util.inspect(obj, false, 2, false));
Tiempo: 4:12 (4 min 12 seg)
Formato del resultado:
[ { PROB: ''00001'',
BO: ''AXZ'',
CNTRY: ''649'' },
...
]
Si está obteniendo [object object]
entonces use JSON.stringify
fs.writeFile(''./data.json'', JSON.stringify(obj) , ''utf-8'');
Funcionó para mí
obj
es una matriz en tu ejemplo.
fs.writeFileSync (nombre de archivo, datos, [opciones]) requiere String
o Buffer
en el parámetro data. ver documentos .
Intenta escribir la matriz en un formato de cadena:
// writes ''https://twitter.com/#!/101Cookbooks'', ''http://www.facebook.com/101cookbooks''
fs.writeFileSync(''./data.json'', obj.join('','') , ''utf-8'');
O:
// writes [''https://twitter.com/#!/101Cookbooks'', ''http://www.facebook.com/101cookbooks'']
var util = require(''util'');
fs.writeFileSync(''./data.json'', util.inspect(obj) , ''utf-8'');
editar: La razón por la que ve la matriz en su ejemplo es porque la implementación del nodo de console.log
no solo llama a util.format
, llama a util.format
consulte la fuente de util.format