Javascript 将新的JSON数据保存到新的JSON文件
让我先说一句,我是个彻头彻尾的傻瓜,谢谢你的帮助 我正在使用api创建用户列表。然而,它只给我小写的名字。所以我用这个脚本(在其他人的帮助下)来大写这些名字。现在我想获取新数据并创建一个json文件。据我所知,我需要使用node.js,但不知道如何正确运行它。我已完成npm安装并安装了此模块: 我还使用firebase将数据放入数据库并托管它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
//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岁才能自由发表评论:)