{ "version": "3.0", "category": "encode", "description": "Arrays of objects encoding - list format for non-uniform objects and complex structures", "tests": [ { "name": "uses list format for objects with different fields", "input": { "items": [ { "id": 1, "name": "First" }, { "id": 2, "name": "Second", "extra": true } ] }, "expected": "items[2]:\n - id: 1\n name: First\n - id: 2\n name: Second\n extra: true", "specSection": "9.4" }, { "name": "uses list format for objects with nested values", "input": { "items": [ { "id": 1, "nested": { "x": 1 } } ] }, "expected": "items[1]:\n - id: 1\n nested:\n x: 1", "specSection": "9.4" }, { "name": "preserves field order in list items - array first", "input": { "items": [{ "nums": [1, 2, 3], "name": "Ada" }] }, "expected": "items[1]:\n - nums[3]: 1,2,3\n name: Ada", "specSection": "10" }, { "name": "preserves field order in list items - primitive first", "input": { "items": [{ "name": "Ada", "nums": [1, 2, 3] }] }, "expected": "items[1]:\n - name: Ada\n nums[3]: 1,2,3", "specSection": "10" }, { "name": "uses list format for objects containing arrays of arrays", "input": { "items": [ { "matrix": [[1, 2], [3, 4]], "name": "grid" } ] }, "expected": "items[1]:\n - matrix[2]:\n - [2]: 1,2\n - [2]: 3,4\n name: grid", "specSection": "10" }, { "name": "uses tabular format for nested uniform object arrays", "input": { "items": [ { "users": [{ "id": 1, "name": "Ada" }, { "id": 2, "name": "Bob" }], "status": "active" } ] }, "expected": "items[1]:\n - users[2]{id,name}:\n 1,Ada\n 2,Bob\n status: active", "specSection": "10", "note": "YAML-style encoding for list-item objects with tabular array as first field" }, { "name": "uses list format for nested object arrays with mismatched keys", "input": { "items": [ { "users": [{ "id": 1, "name": "Ada" }, { "id": 2 }], "status": "active" } ] }, "expected": "items[1]:\n - users[2]:\n - id: 1\n name: Ada\n - id: 2\n status: active", "specSection": "10" }, { "name": "uses list format for objects with multiple array fields", "input": { "items": [{ "nums": [1, 2], "tags": ["a", "b"], "name": "test" }] }, "expected": "items[1]:\n - nums[2]: 1,2\n tags[2]: a,b\n name: test", "specSection": "10" }, { "name": "uses list format for objects with only array fields", "input": { "items": [{ "nums": [1, 2, 3], "tags": ["a", "b"] }] }, "expected": "items[1]:\n - nums[3]: 1,2,3\n tags[2]: a,b", "specSection": "10" }, { "name": "encodes objects with empty arrays in list format", "input": { "items": [ { "name": "Ada", "data": [] } ] }, "expected": "items[1]:\n - name: Ada\n data[0]:", "specSection": "10" }, { "name": "uses canonical encoding for multi-field list-item objects with tabular arrays", "input": { "items": [{ "users": [{ "id": 1 }, { "id": 2 }], "note": "x" }] }, "expected": "items[1]:\n - users[2]{id}:\n 1\n 2\n note: x", "specSection": "10", "note": "Tabular header on hyphen line with rows at depth +2 and sibling fields at depth +1" }, { "name": "uses canonical encoding for single-field list-item tabular arrays", "input": { "items": [{ "users": [{ "id": 1, "name": "Ada" }, { "id": 2, "name": "Bob" }] }] }, "expected": "items[1]:\n - users[2]{id,name}:\n 1,Ada\n 2,Bob", "specSection": "10", "note": "Tabular header on hyphen line with rows at depth +2" }, { "name": "places empty arrays on hyphen line when first", "input": { "items": [{ "data": [], "name": "x" }] }, "expected": "items[1]:\n - data[0]:\n name: x", "specSection": "10" }, { "name": "encodes empty object list items as bare hyphen", "input": { "items": ["first", "second", {}] }, "expected": "items[3]:\n - first\n - second\n -", "specSection": "10", "note": "Empty object list items encode as a single \"-\" line at the list-item depth" }, { "name": "uses field order from first object for tabular headers", "input": { "items": [ { "a": 1, "b": 2, "c": 3 }, { "c": 30, "b": 20, "a": 10 } ] }, "expected": "items[2]{a,b,c}:\n 1,2,3\n 10,20,30", "specSection": "9.3" }, { "name": "uses list format when one object has nested field", "input": { "items": [ { "id": 1, "data": "string" }, { "id": 2, "data": { "nested": true } } ] }, "expected": "items[2]:\n - id: 1\n data: string\n - id: 2\n data:\n nested: true", "specSection": "9.4" } ] }