Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将新的JSON数据保存到新的JSON文件_Javascript_Json_Node.js - Fatal编程技术网

Javascript 将新的JSON数据保存到新的JSON文件

Javascript 将新的JSON数据保存到新的JSON文件,javascript,json,node.js,Javascript,Json,Node.js,让我先说一句,我是个彻头彻尾的傻瓜,谢谢你的帮助 我正在使用api创建用户列表。然而,它只给我小写的名字。所以我用这个脚本(在其他人的帮助下)来大写这些名字。现在我想获取新数据并创建一个json文件。据我所知,我需要使用node.js,但不知道如何正确运行它。我已完成npm安装并安装了此模块: 我还使用firebase将数据放入数据库并托管它 //init firebasejs var config = { apiKey: "AIzaSyD0F_1-ynUdzpEkQADrs6BbXUI

让我先说一句,我是个彻头彻尾的傻瓜,谢谢你的帮助

我正在使用api创建用户列表。然而,它只给我小写的名字。所以我用这个脚本(在其他人的帮助下)来大写这些名字。现在我想获取新数据并创建一个json文件。据我所知,我需要使用node.js,但不知道如何正确运行它。我已完成npm安装并安装了此模块:

我还使用firebase将数据放入数据库并托管它

//init firebasejs
var config = {
    apiKey: "AIzaSyD0F_1-ynUdzpEkQADrs6BbXUInFCkpBdM",
    authDomain: "random-users.firebaseapp.com",
    databaseURL: "https://random-users.firebaseio.com",
    projectId: "random-users",
    storageBucket: "random-users.appspot.com",
    messagingSenderId: "675456550116"
};
firebase.initializeApp(config);

var database = firebase.database();

var fs = require('fs');

var jsonfile = require('jsonfile')
var file = '/tmp/data.json'

//fuunction to capitalize strings
function capitalize(text) {
    return (!text || !text.length) ?
        text :
        (text[0].toUpperCase() + text.slice(1));
}


$.get("https://randomuser.me/api/ results=20&nat=us&inc=name,gender,picture&format=pretty",
    function(data) {
        if (!data || !data.results)
            return;

        //going through 'data' and capitalizing name and gender
        data.results.forEach(function(user) {
            if (user.name) {
                for (var name in user.name) {
                    user.name[name] = capitalize(user.name[name]);
                }
            }
            if (user.gender) {
                user.gender = capitalize(user.gender);
            }
        });

        console.log(data);

        //write new data to firebase
        database.ref().set(data);

        //write json file?
        var result = JSON.stringify(data, null, 4);
        $('#randomUsers').html(result);

        jsonfile.writeFile(file, data, {spaces: 2}, function(err) {
            console.error(err)
        })


        // var fs = require("fs");
        // fs.writeFile("randomUsers.json", result, function(err) {
        //     if (err) {
        //         return console.log(err);
        //     } else {
        //         console.log("The file was saved!");
        //     }
        // });

  });

你能告诉我正确的方向吗?谢谢大家!

如果您只是想测试自己的数据,那么使用consolesave.js for Chrome可以为您节省大量时间。当我开始设置项目和测试通过ajax检索的数据,然后进行解析和重写时,这个小脚本允许您直接从Chrome(到下载文件夹)编写JSON。我不确定我从哪里得到这个文件,但其中一个来源是github repo

函数大写(文本){
返回(!text | |!text.length)?
正文:
(text[0].toUpperCase()+text.slice(1));
}
(功能(控制台){
console.save=函数(数据、文件名){
console.log('数据为'+数据);
如果(!数据){
console.error('console.save:无数据')
回来
}
如果(!filename)filename='console'
如果(数据类型==“对象”){
data=JSON.stringify(数据,未定义,4)
}
var blob=new blob([data],{type:'text/json'}),
e=document.createEvent('MouseEvents'),
a=document.createElement('a')
a、 下载=文件名+'.json'
a、 href=window.URL.createObjectURL(blob)
a、 dataset.downloadurl=['text/json',a.download,a.href].join(':')
e、 initMouseEvent('click',true,false,window,0,0,0,0,false,false,false,false,0,null)
a、 调度事件(e)
}
})(控制台)
$.ajax({
网址:'https://randomuser.me/api/?results=20&nat=us&inc=name,性别,图片和格式=漂亮',
键入:“GET”,
数据类型:'json',
成功:函数(数据){
如果(!data | |!data.results){
console.log(“无数据”);
回来
}
console.log('获取您的数据')
//查看“数据”并将姓名和性别大写
data.results.forEach(函数(用户){
if(用户名){
for(user.name中的变量名){
user.name[name]=大写(user.name[name]);
}
}
if(用户性别){
user.gender=大写(user.gender);
}
});
控制台日志(数据);
save(JSON.stringify(data),'test_data.JSON');
}
})

终于明白了。经过几个小时的反复试验,我终于成功了!可能是混乱和可怕的代码,但这是一个黑客项目从一开始就无论如何。这是我的最终代码:

// initialize firebase------------------------------------
var firebase = require('firebase');

var config = {
    apiKey: "AIzaSyBjS4dUaqPLhggmdF9hrIwQTH4i4QwjpR4",
    authDomain: "my-user-generator.firebaseapp.com",
    databaseURL: "https://my-user-generator.firebaseio.com",
    projectId: "my-user-generator",
    storageBucket: "my-user-generator.appspot.com",
    messagingSenderId: "317975340395"
  };
var app = firebase.initializeApp(config);
var database = firebase.database();
//-------------------------------------------------------

const got = require('got');
var each  = require('foreach');
var jsonfile = require('jsonfile')

//function to capitalize text
function capitalize(text) {
    return (!text || !text.length) ?
    text :
    (text[0].toUpperCase() + text.slice(1));
}

got('https://randomuser.me/api/?results=20&nat=us&inc=name,gender,picture&format=pretty', {json: true}).then(response => {

        var data = response.body;

        //capitalize names and gender
        each(data.results, function(user) {
            if (user.name) {
                for (var name in user.name) {
                    user.name[name] = capitalize(user.name[name]);
                }
            }
            if (user.gender) {
                user.gender = capitalize(user.gender);
            }
        });

        //create json file
        var file = 'users.json';

        jsonfile.writeFile(file, data, {spaces: 4, EOL: '\r\n'}, function(err) {
            console.error(err)
        });
        console.log(data);

        //write new data to firebase
        database.ref().set(data);

}).catch(error => {
    console.log(error.response.body);
});

你得到了什么结果?Firebase与所问的问题完全无关,您应该隔离一个不涉及Firebase查询和get请求的最小用例。@skylize所以我对如何从我的机器本地运行脚本感到困惑(我现在正在使用MAMP)。据我所知,节点不是从浏览器运行的。我在看一些例子,上面说使用终端来做“node script.js”。谢谢,我不确定,所以我只是把firebase的信息放进去以防万一。这就是我在运行“node script.js”并注释掉所有firebase引用时得到的结果:我想它不喜欢node.js和常规js/jquery的组合?NodeJs上没有jquery,因为没有HTML DOM可以处理。您应该完全替换$.get();方法使用NodeJS的内置“http”功能,或者可能使用-module。这是一个关于使用NodeJs发出请求的页面,您可以使用Node而不是MAMP堆栈。如果您正在谈论让用户将文件保存到他们的计算机,请尝试查看此处。如果您想在服务器上使用node,您应该学习一些基本的node教程。谢谢@Mikser。我想我必须用所有的nodej来做这个。好吧,我把所有东西(我想)都转换成了nodejs,当我在没有大写函数的情况下运行它时,它工作得很好,但是因为forEach,我得到了一个错误。如何将其转换为正确的节点?(我注释掉了大写函数并用“这不起作用”)谢谢!这在将来是非常有用的!太好了你能给我一票吗?我需要到50岁才能自由发表评论:)