我有以下JSON格式:
[{
"-KQVfnf1ZCml7dZ1dZAC": {
"content": {
"data": "New Order",
"type": "text/plain"
},
"conversation_id": "990",
"is_admin": false,
"is_announce": false,
"is_deleted": false,
"message_id": "9694",
"sender": {
"name": "Paras",
"user_id": "285"
},
"sent_at": "1472648381032"
},
"-KQVgEHps9L3l80nmkWb": {
"content": {
"data": "New Shipment",
"type": "text/plain"
},
"conversation_id": "990",
"is_admin": false,
"is_announce": false,
"is_deleted": false,
"message_id": "9694",
"sender": {
"name": "Paras",
"user_id": "285"
},
"sent_at": "1472648431073"
},
"created_at": "1472647272113",
"$id": "messages",
"$priority": null
}]
现在我使用Angular从JSON数组中检索我需要的部分数据。
Angular Code是:
$scope.user_message = [];
$scope.user_content = [];
angular.forEach($scope.messages, function(value, key){
$scope.user_message.push(value);
angular.forEach($scope.user_message, function(value, key){
$scope.user_content.push(value[key]);
console.log($scope.user_content);
});
});
我想从JSON检索的数据是:
{
"content": {
"data": "New Order",
"type": "text/plain"
},
"conversation_id": "990",
"is_admin": false,
"is_announce": false,
"is_deleted": false,
"message_id": "9694",
"sender": {
"name": "Paras",
"user_id": "285"
},
"sent_at": "1472648381032"
}
所以,基本上我想要JSON数组中的所有内容,除了以-KQV开头的消息id键...
但它始终返回Key:0 Value:[object Object]。
任何人都可以帮我解决问题吗?
答案 0 :(得分:0)
您可以使用-static -lboost_thread
语法迭代对象的每个键,并检查对象名称是否以Object.keys(object).foreach()
开头。如果是这样,请使用该对象。这将为您提供所需的每个数组的特定部分。在这里,我将它打印到控制台并将其推入-KQV
数组。
$scope.user_message
答案 1 :(得分:0)
这个更短但是假设JSON数组的第一个元素始终包含消息:
class Geoobject(m.db.Model):
__tablename__ = 'geoobjects'
id = m.db.Column(m.db.Integer, primary_key=True)
name = m.db.Column(m.db.String)
def __init__(self, code: int, name: str):
self.code = code
self.name = name
class Region(Geoobject):
__tablename__ = 'regions'
id = m.db.Column(m.db.Integer, m.db.ForeignKey('geoobjects.id'),
primary_key=True)
code = m.db.Column(m.db.Integer)
def __init__(self, name: str, code: int):
self.name = name
self.code = code
self.region_id = self.id
class TransportArea(Geoobject):
__tablename__ = 'transport_areas'
id = m.db.Column(m.db.Integer, m.db.ForeignKey('geoobjects.id'),
primary_key=True, autoincrement=True)
region = m.db.relationship('Region',
foreign_keys='Region.id', uselist=False)
def __init__(self,
name: str,
region: Iterable[Region]):
self.name = name
self.region = region
它还会将我们确定不是邮件的密钥(' created_at'等)列入黑名单,而不是将那些以特定字符串开头的密钥列入白名单(' -Kv' ),最终可能会改变。
答案 2 :(得分:0)
不完全确定您的目标是什么,如果您可以使用更多示例消息扩展您的消息数组并提供预期的输出,那将是很好的。此版本的代码会将每封邮件中的所有对象存入$ scope.user_content(它没有检查'KQV'):
$scope.user_message = [];
$scope.user_content = [];
angular.forEach($scope.messages, function(value, key){
$scope.user_message.push(value);
angular.forEach(value, function(value1, key1){
if (value1 === null || typeof value1 !== 'object') return;
$scope.user_content.push(value1);
});
});
console.log($scope.user_content);
小提琴: http://jsfiddle.net/b2gy2yr1/
我还建议调查lodash - 这使得这类任务变得更加容易: https://lodash.com/docs/4.15.0