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:
idis a stable numeric ID assigned by Revit. It does not change unless the element is deleted and recreated.nameis 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 assignedvalue: 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 |
— |