2017-04-19 39 views
0
var twitchProfile = {}; 
request("https://api.twitch.tv/kraken/users/magnaboyy.json?client_id=8gkbch3ffqj35c1ccx088b9j6leifs8", function (error, response, body) { 
const TwitchURL = body; 
var jsonContent = JSON.parse(TwitchURL); 
twitchProfile.display_name = (jsonContent.display_name); 
twitchProfile.id = (jsonContent.id); 
twitchProfile.name = (jsonContent.name); 
twitchProfile.created_at = (jsonContent.created_at); 
twitchProfile.logo = (jsonContent.logo); 
console.log(twitchProfile); 

在我的代码中,我抓取页面的HTML正文(这是json对象),然后我解析对象中的每个键作为JS对象中的键,考虑到我不想改变任何东西在键的名称或对象的内容中,是否有办法一次性转换整个对象,而不是一次转换所有组件?如果没有,我是否以一种好的方式来做?有没有更简单的方法将外部JSON对象转换为JS对象?

+0

__ “解析对象中的每个关键” __?不,你不是!你只是解析'JSON'一次... – Rayon

+2

为什么不把'twitchProfile'分配给'jsonContent'? – hindmost

+0

twitchProfile&jsonContent有什么区别? – daljian

回答

2

是的,你可以指定解析的对象的变量:

var twitchProfile = {}; 
request("https://api.twitch.tv/kraken/users/magnaboyy.json?client_id=8gkbch3ffqj35c1ccx088b9j6leifs8", function (error, response, body) { 
    const TwitchURL = body; 
    var twitchProfile = JSON.parse(TwitchURL); 
    console.log(twitchProfile); 
} 

此外,如果你的“TwitchProfile”已经有一些属性,你必须合并对象。合并此处描述的方法:How can I merge properties of two JavaScript objects dynamically?

+0

谢谢,这是有道理的,我花了一个多小时试图进一步调试我的代码在异步工作,但它不工作:https:// jsfiddle。net/kecqpn48 /请求在try中,但是我尝试使用r.get,使用rp.get(request-promise)在外面移动它,并且不知道是什么导致它(我尝试了很多解决方案)。 – Magnaboy

+0

@Magnaboy jsfiddle不起作用的原因包括丢失。你看到模块**请求**的例子吗? https://github.com/request/request –

+0

我只是使用jsfiddle作为向您展示代码的一种方式,我见过的例子是 – Magnaboy

1

如果你有不同的对象,但需要它们合并起来,例如:

var a = { 
x:0, 
y:1, 
z:2 
} 

var fromJSON = { 
x:11, 
y:12, 
} 

您可以使用Object.Assign()

var a = { 
x:0, 
y:1, 
z:2 
} 

var fromJSON = { 
x:11, 
y:12, 
} 

var assigned = Object.Assign(a,fromJSON); 
console.log(assigned); 

// assigned = { 
// x:11, 
// y:12, 
// z:2 
// } 
0

没有,唯一你可以这样做,使其更具可读性是使用constructor

见下面的例子请:

var jsonObj = { 
 
    "name" : "Alessandro", 
 
    "surname" : "Test", 
 
    "age" : 34 
 
}; 
 

 
function Person(json){ 
 
    this.name = json.name; 
 
    this.surname = json.surname; 
 
    this.age = json.age; 
 
} 
 

 
var person1 = new Person(jsonObj); 
 

 
console.log("Hi " + person1.name);

0

的方式来实现这一目标:

可以使用JSON.parse()创建source objectdeep copydestination(new) objectJSON.stringify() JavaScript的方法。

var jsonObj = { 
 
    "display_name" : "alpha", 
 
    "id" : 1, 
 
    "name" : "xyz", 
 
    "logo" : "blablabla" 
 
}; 
 

 
var twitchProfile = JSON.parse(JSON.stringify(jsonObj)); 
 

 
console.log(twitchProfile);

2.使用ES6传播算子,破坏作业。

const jsonObj = { 
    "display_name" : "alpha", 
    "id" : 1, 
    "name" : "xyz", 
    "logo" : "blablabla" 
}; 
const {...twitchProfile} = jsonObj; 
console.log(twitchProfile); 

3.Iterate使用for...in环和assign属性到destination(new)对象的源对象。

var jsonObj = { 
 
    "display_name" : "alpha", 
 
    "id" : 1, 
 
    "name" : "xyz", 
 
    "logo" : "blablabla" 
 
}; 
 

 
var twitchProfile = {}; 
 

 
for (var i in jsonObj) { 
 
    twitchProfile[i] = jsonObj[i]; 
 
} 
 

 
console.log(twitchProfile);