[API reference](https://evolu.dev/docs/api-reference) › [@evolu/common](https://evolu.dev/docs/api-reference/common) › [local‑first/Query](https://evolu.dev/docs/api-reference/common/local-first/Query) › evoluJsonObjectFrom

```ts
function evoluJsonObjectFrom<O>(
  expr: SelectQueryBuilderExpression<O>,
): RawBuilder<Simplify<O> | null>;
```

Defined in: [packages/common/src/local-first/Query.ts:157](https://github.com/evoluhq/evolu/blob/e7144e2bbe9069362b62dec1b64a8aa922b8f1b0/packages/common/src/local-first/Query.ts#L157)

An improved Evolu version of Kysely's SQLite `jsonObjectFrom` helper.

Kysely's `ParseJSONResultsPlugin` heuristically parses any result string that
looks like JSON. Evolu instead prefixes JSON produced by these helpers with a
per-runtime identifier and only parses values carrying that prefix, avoiding
accidental parsing of ordinary string columns that merely happen to start
with `{` or `[`.

The subquery must only return one row.

### Example

```ts

const result = await db
  .selectFrom("person")
  .select((eb) => [
    "id",
    evoluJsonObjectFrom(
      eb
        .selectFrom("pet")
        .select(["pet.id as pet_id", "pet.name"])
        .whereRef("pet.owner_id", "=", "person.id")
        .where("pet.is_favorite", "=", true),
    ).as("favorite_pet"),
  ])
  .execute();

result[0]?.id;
result[0]?.favorite_pet?.pet_id;
result[0]?.favorite_pet?.name;
```