PostgreSQL从 9.3 版本开始就有了一些原生的JSON 操作。假设您有一个表 , my_table, 有一json列my_json_col, 结构如下:
[
{ "id": 1, "some_field": "blabla" },
{ "id": 2, "some_field": "foo" }
...
]
Run Code Online (Sandbox Code Playgroud)
要检索的第n个元素my_json_col,可以执行类似:SELECT my_json_col->n FROM my_table WHERE ...。因此,如果n = 1,查询将返回"id": 2我示例中的记录。
我想检索前 n 个元素,例如,如果n = 2查询应该返回我的示例中的前两条记录。这可能吗?
我的实体FosUserBundle
namespace AppBundle\Entity;
use JMS\Serializer\Annotation\Expose;
use JMS\Serializer\Annotation\Exclude;
use JMS\Serializer\Annotation\ExclusionPolicy;
use Doctrine\ORM\Mapping as ORM;
use FOS\UserBundle\Model\User as BaseUser;
use FOS\UserBundle\Model\Group;
/**
* User
*
* @ORM\Table(name="user")
* @ORM\Entity(repositoryClass="AppBundle\Repository\UserRepository")
* @ExclusionPolicy("all")
*/
class User extends BaseUser
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
* @Exclude
*/
protected $id;
/**
* @ORM\Column(type="integer")
*/
private $balance = 0;
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试序列化App\Entity\User对象:
$this->get('jms_serializer')->serialize($user, 'json');
Run Code Online (Sandbox Code Playgroud)
它归还给我ID字段!
{
"id": 1,
"username": "admin",
"username_canonical": "admin",
"email": "admin",
"email_canonical": "admin",
"enabled": true,
"salt": "o12yxgxp3vkk0w4sck80408w8s8o84s",
"password": "$2y$13$o12yxgxp3vkk0w4sck804uSVjSMSB1W0qwEjunGTHomBqqoGvkW9G",
"last_login": "2016-02-28T17:28:19+0300",
"locked": false, …Run Code Online (Sandbox Code Playgroud) 我试图通过交换指针的地址来交换任何给定类型的两个值.
我提出的函数在调用任何两个整数时工作正常,但是当在同一范围内定义更多整数时,行为很奇怪(至少对我来说).例如,考虑一下这个SSCCE:
#include <stdio.h>
static inline void exchx(void** a, void** b) { void* p = *a; *a = *b; *b = p; }
int main(void) {
int a = 1;
int b = 2;
int c = 3;
int d = 4;
printf("\nBefore: abcd = %d, %d, %d, %d", a, b, c, d);
exchx((void**)&a,(void**)&b);
printf("\nAfter: abcd = %d, %d, %d, %d\n", a, b, c, d);
}
Run Code Online (Sandbox Code Playgroud)
我希望第二次打印是"2,1,3,4",但我得到了这个:
Before: abcd = 1, 2, 3, 4
After: abcd = 2, 1, 2, …Run Code Online (Sandbox Code Playgroud)