[API reference](https://evolu.dev/docs/api-reference) › [@evolu/common](https://evolu.dev/docs/api-reference/common) › [Eq](https://evolu.dev/docs/api-reference/common/Eq) › eqJsonValueInput

```ts
function eqJsonValueInput(a: JsonValueInput, b: JsonValueInput): boolean;
```

Defined in: [packages/common/src/Eq.ts:228](https://github.com/evoluhq/evolu/blob/e7144e2bbe9069362b62dec1b64a8aa922b8f1b0/packages/common/src/Eq.ts#L228)

Deeply compares two [JsonValueInput](https://evolu.dev/docs/api-reference/common/Type/type-aliases/JsonValueInput) values for equality.

- Uses an iterative approach with a stack to handle large or deeply nested
  objects without risking stack overflow.
- Handles circular references with a WeakMap to prevent infinite loops.
- Unlike JSON.stringify, this function directly compares values, avoiding
  serialization overhead and leveraging short-circuit evaluation for faster
  failure on mismatched structures.

### Example

```ts
const obj1: Json = { name: "Alice", hobbies: ["reading", "hiking"] };
const obj2: Json = { name: "Alice", hobbies: ["reading", "hiking"] };
console.log(eqJson(obj1, obj2)); // true
```