小编Leo*_*ito的帖子

使用 Postgresql 查询检索 JSON 数组的前 N ​​条记录

PostgreSQL从 9.3 版本开始就有了一些原生的JSON 操作。假设您有一个表 , my_table, 有一jsonmy_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查询应该返回我的示例中的前两条记录。这可能吗?

postgresql json

5
推荐指数
2
解决办法
3830
查看次数

JMS序列化捆绑@exclude注释不起作用

我的实体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)

symfony

4
推荐指数
1
解决办法
3605
查看次数

使用void**的通用交换尝试

我试图通过交换指针的地址来交换任何给定类型的两个值.

我提出的函数在调用任何两个整数时工作正常,但是当在同一范围内定义更多整数时,行为很奇怪(至少对我来说).例如,考虑一下这个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)

c swap void-pointers

1
推荐指数
1
解决办法
203
查看次数

标签 统计

c ×1

json ×1

postgresql ×1

swap ×1

symfony ×1

void-pointers ×1