Skip to content

Identity vs Value

Every object in the DAQS JSON has two distinct parts: its identity and its values.

Understanding the difference determines whether you use a field for filtering or for validation.


Identity — what an object is

Identity fields describe the object itself. They are stable and structural:

Field Purpose
id Unique numeric identifier in the model
type Object classification (FamilyInstance, FamilySymbol, etc.)
name Display name
parent Reference to the parent object

Example:

{
  "id": 616521,
  "type": "FamilyInstance",
  "name": "1018x2387",
  "parent": { "id": 617464, "type": "FamilySymbol" }
}

Identity fields answer: what is this object and where does it fit?


Values — what an object has

Values are the data carried by the object — parameters, properties, measurements:

"values": {
  "mark": "D-01",
  "levelId": 311,
  "comments": null,
  "exportedToIfc": "By Type"
}

Values answer: what data does this object carry?


Why the distinction matters

Filtering uses identity

When you filter objects, you typically use identity fields — type, parent.id — because they are structural and reliable.

$[type = "FamilyInstance" and parent.id in $doorIds]

Validation uses values

When you validate, you check fields inside values — because those are the data quality properties you care about.

"mark": values.mark   /* extracted for validation */

id is safe — name often is not

Both id and name are identity fields, but they behave differently:

  • id is a stable numeric ID assigned by Revit. It does not change unless the element is deleted and recreated.
  • name is a display string — it can be edited, duplicated, or localised.

When linking objects (e.g. finding a FamilySymbol from an instance), always use id:

/* Safe */
parent.id in $symbolIds

/* Fragile — names can be duplicated */
parent.name = "1018x2387"

The same applies to parameter GUIDs vs parameter names. The GUID is stable; the name can be renamed.


hasValue vs null

For shared parameters, there is an important distinction inside values:

"p_8fe8f5ce-4979-4679-b5e0-ccfb362b9059": {
  "id": 317596,
  "value": null,
  "hasValue": false,
  "valueAsString": null
}
  • hasValue: false — the parameter exists but has no value assigned
  • value: null — the value is absent or not set

A parameter can exist on an object (hasValue: false) without having a value (value: null). These are different conditions and may require different validators.


Summary

Identity Values
Fields id, type, name, parent values.*
Stability Stable Mutable
Use in rules Filtering / scoping Validation
Safe for linking? id yes, name no