GVKun编程网logo

获取 JSON 对象的大小(获取json对象的值)

13

关于获取JSON对象的大小和获取json对象的值的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于Android和Dalvik-获取对象的大小、AngularJS:如何获取JSON对象的键、

关于获取 JSON 对象的大小获取json对象的值的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于Android和Dalvik-获取对象的大小、AngularJS:如何获取JSON对象的键、c – 为什么动态创建的对象与对象的大小相差两倍?、c – 获取Qt对象的大小等相关知识的信息别忘了在本站进行查找喔。

本文目录一览:

获取 JSON 对象的大小(获取json对象的值)

获取 JSON 对象的大小(获取json对象的值)

我有一个由 AJAX 请求返回的 JSON 对象,我遇到了一些问题,.length因为它一直在返回undefined。只是想知道我是否正确使用它:

console.log(data.length);
console.log(data.phones.length);

undefined即使它们是有效对象,它们也会返回。

更新:
返回的 JSON 对象示例:

{"reqStatus":true,"phones":{"one":{"number":"XXXXXXXXXX","type":"mobile"},"two":{"number":"XXXXXXXXXX","type":"mobile"}}}

Android和Dalvik-获取对象的大小

Android和Dalvik-获取对象的大小

众所周知,Java 5引入了Instrumentation的功能,可轻松获得对象的大小。Android和Dalvik上有这种方法吗?

java.lang.instrument软件包在Android上不可用。

答案1

小编典典

对于它的价值,我查看了Dalvik
VM源代码,但找不到任何稳定的API来获取对象的大小。如果您想自己看一下,对象的大小存储在中ClassObject::objectSize :size_t,请参见 dalvik / vm / oo / Object.h

但是,有 内部
API可以获取对象的大小。DDMS使用它来报告有关对象大小的详细信息。但是,由于API是内部的,因此很可能会在不同版本的Android之间进行更改。另外,该API会发送原始byte[]数据,并且基于客户端/服务器,而不是简单的库调用,因此使用起来非常尴尬。如果你想看看,开始dvmAllocObject()
达尔维克/ VM /分配/ Alloc.cppdvmTrackAllocation()电话。

综上所述:遗憾的是,没有任何易于使用的稳定API可以在Dalvik VM中获得对象的大小。

AngularJS:如何获取JSON对象的键

AngularJS:如何获取JSON对象的键

我不确定这是否与AngularJS有关,如果它只是JSON相关。

无论如何,让我们说,我们有以下JSON:

$scope.dataSets = {
    "names": ["Horace","Slughorn","Severus","Snape"],"genders": ["Male","Female"]
}

现在,我使用ng-repeat指令打印上面的内容如下:

<div ng-repeat="data in dataSets>
    //Continue readig to kNow what I am expcting here
</div>

我期望在< div>< / div>标签是打印“名称”和“性别”。也就是说,我希望打印JSON的键。我不知道什么是钥匙,因为在他们可以是任何东西。我如何做到这一点?

如文件所述:

(key,value) in expression – where key and value can be any user defined identifiers,and expression is the scope expression giving the collection to enumerate.

<div ng-repeat="(key,data) in dataSets">
  {{key}}
</div>

c – 为什么动态创建的对象与对象的大小相差两倍?

c – 为什么动态创建的对象与对象的大小相差两倍?

我编写了代码来创建动态创建对象的链接列表:

#include <iostream>
using namespace std;

struct X {
  int i;
  X* x;
};

void birth(X* head,int quant){
  X* x = head;
  for(int i=0;i<quant-1;i++){
    x->i = i+1;
    x->x = new X;
    x = x->x;
  }
  x->i = quant;
  x->x = 0;
}

void kill(X* x){
  X* next;
  while(1==1){
    cout << x->i << endl;
    cout << (long)x << endl;
    next = x->x;
    delete x;
    if(next == 0){
      break;
    } else {
      x = next;
    }
  }
}

int main(){
  cout << (long)sizeof(X) << endl;
  X* x = new X;
  birth(x,10);
  kill(x);
  return 0;
}

这似乎是有效的,除了当你查看每个对象的地址时……

16
1
38768656
2
38768688
3
38768720
4
38768752
5
38768784
6
38768816
7
38768848
8
38768880
9
38768912
10
38768944

尽管X的大小仅为16位,但它们似乎相隔32位.我是如何创建对象的,或者这只是动态分配如何工作的结果?

解决方法

原因在7.22.3 C Standard的内存管理功能中说明:

The order and contiguity of storage allocated by successive calls to
the aligned_alloc,calloc,malloc,and realloc functions is
unspecified. The pointer returned if the allocation succeeds is
suitably aligned so that it may be assigned to a pointer to any type
of object with a fundamental alignment requirement and then used to
access such an object or an array of such objects in the space
allocated

由于内存必须“适当对齐,以便可以将其分配给指向具有基本对齐要求的任何类型对象的指针”,因此malloc等人返回的内存倾向于从不同的,与平台相关的倍数开始 – 通常为8-或16字节边界.

并且因为new通常用malloc实现,所以这也适用于C new.

c – 获取Qt对象的大小

c – 获取Qt对象的大小

我正在使用Qt和C,我需要找出某些Qt类的实例使用的内存量,这通常使用sizeof来完成,但是在Qt中每个类都包含一个指向包含实际实现的另一个类的指针,在头文件中找不到此私有实现类的定义,但仅在源代码中找到.

我是QT的新手,所以可能有一种标准的方法可以做到这一点,如果你没有任何想法来解决这个问题?

解决方法

这个问题没有确切的答案,因为为同一类型的不同对象分配的内存量可能甚至不相同(例如,QSomething A可能能够重用缓存中的某些数据,而QSomething B可能必须单独分配它等).

我想你可以做的是写一个简单的测试程序,启动,分配有问题的对象的N,然后进入sleep()很长一段时间.当程序正在休眠时,使用任务管理器(或您喜欢的任何工具)来查看进程使用多少RAM.然后ctrl-C(或杀死)该过程,并使用较大的N值再次运行它,并重复测量.重复这个过程,最后你会知道进程的RAM分配如何随着分配的项目数量而增长,然后你可以做一个小代数来得到每个对象的平均内存成本.

(请记住,在启动过程时会有很多内存开销,因此从所有情况中减去N = 0情况所使用的内存,这样您只需测量对象的成本而不是环境开销)

今天的关于获取 JSON 对象的大小获取json对象的值的分享已经结束,谢谢您的关注,如果想了解更多关于Android和Dalvik-获取对象的大小、AngularJS:如何获取JSON对象的键、c – 为什么动态创建的对象与对象的大小相差两倍?、c – 获取Qt对象的大小的相关知识,请在本站进行查询。

本文标签: