Skip to content

객체 배열

객체 배열을 사용하여 관련 속성을 그룹화합니다. 예를 들어 애완동물 개체, 노래 개체, 계정 개체가 모두 한 사용자에게 속하는 그룹이 있을 수 있습니다. 이러한 개체 배열을 사용하여 Liquid로 메시지를 개인화하거나 개체 내의 요소가 기준과 일치하는 경우 오디언스 세그먼트를 만들 수 있습니다.

제한 사항

  • 객체 배열은 API를 통해 전송되는 사용자 정의 속성을 위한 것입니다. CSV 업로드는 지원되지 않습니다. 이는 CSV 파일의 쉼표가 열 구분 기호로 해석되고 값의 쉼표가 구문 분석 오류를 유발하기 때문입니다.
  • 객체 배열은 항목 수에 제한이 없지만 최대 크기는 50KB입니다.
  • 모든 Braze 파트너가 오브젝트 배열을 지원하는 것은 아닙니다. 연동에서 이 기능을 지원하는지 확인하려면 파트너 설명서를 참조하세요.

배열의 항목을 업데이트하거나 제거하려면 키와 값으로 항목을 식별해야 합니다. 따라서 배열의 각 항목에 고유 식별자를 포함하는 것이 좋습니다. 고유성은 배열로만 범위가 지정되며 배열에서 특정 개체를 업데이트하고 제거하려는 경우에 유용합니다. 이는 Braze에서 강제하지 않습니다.

API 예제

다음은 pets 배열을 사용한 /users/track 예제입니다. 펫의 속성을 캡처하려면 pets 을 객체 배열로 나열하는 API 요청을 보내세요. 각 객체에는 나중에 업데이트할 때 참조할 수 있는 고유한 id 주소가 할당되어 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
{
  "attributes": [
    {
      "external_id": "user_id",
      "pets": [
        {
          "id": 1,
          "type": "dog",
          "breed": "beagle",
          "name": "Gus"
        },
        {
          "id": 2,
          "type": "cat",
          "breed": "calico",
          "name": "Gerald"
        }
      ]
    }
  ]
}

$add 연산자를 사용하여 배열에 다른 항목을 추가합니다. 다음 예는 사용자의 pets 배열에 3개의 펫 객체를 추가하는 것을 보여줍니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
{
  "attributes": [
    {
      "external_id": "user_id",
      "pets": {
        "$add": [
          {
            "id": 3,
            "type": "dog",
            "breed": "corgi",
            "name": "Doug"
          },
          {
            "id": 4,
            "type": "fish",
            "breed": "salmon",
            "name": "Larry"
          },
           {
            "id": 5,
            "type": "bird",
            "breed": "parakeet",
            "name": "Mary"
          }
        ]
      }
    }
  ]
}

_merge_objects 매개변수와 $update 연산자를 사용하여 배열 내의 특정 객체에 대한 값을 업데이트합니다. 단순 중첩된 사용자 지정 속성 개체에 대한 업데이트와 유사하게 심층 병합을 수행합니다.

다음 예제는 id4 인 개체에 대해 breed 속성을 goldfish 으로 업데이트하는 것을 보여줍니다. 이 요청 예제는 또한 id 의 개체를 5 으로 업데이트하여 Annette 의 새로운 name 로 업데이트합니다. _merge_objects 매개 변수는 true 으로 설정되어 있으므로 이 두 개체의 다른 모든 필드는 동일하게 유지됩니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
{
  "attributes": [
    {
      "external_id": "user_id",
      "_merge_objects": true,
      "pets": {
        "$update": [
          {
            "$identifier_key": "id",
            "$identifier_value": 4,
            "$new_object": {
              "breed": "goldfish"
            }
          },
          {
            "$identifier_key": "id",
            "$identifier_value": 5,
            "$new_object": {
              "name": "Annette"
            }
          }
        ]
      }
    }
  ]
}

일치하는 키($identifier_key) 및 값($identifier_value)과 함께 $remove 연산자를 사용하여 배열에서 개체를 제거합니다.

다음 예제는 pets 배열에서 값이 1id, 값이 2id, 값이 dogtype 를 가진 개체를 제거하는 예제입니다 . dog 값이 type 인 객체가 여러 개 있는 경우 일치하는 모든 객체가 제거됩니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
{
  "attributes": [
    {
      "external_id": "user_id",
      "pets": {
        "$remove": [
          // Remove by ID
          {
            "$identifier_key": "id",
            "$identifier_value": 1
          },
          {
            "$identifier_key": "id",
            "$identifier_value": 2
          },
          // Remove any dog
          {
            "$identifier_key": "type",
            "$identifier_value": "dog"
          }
        ]
      }
    }
  ]
}

SDK 예제

생성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
val json = JSONArray()
    .put(JSONObject()
        .put("id", 1)
        .put("type", "dog")
        .put("breed", "beagle")
        .put("name", "Gus"))
    .put(JSONObject()
        .put("id", 2)
        .put("type", "cat")
        .put("breed", "calico")
        .put("name", "Gerald")
    )

braze.getCurrentUser { user ->
    user.setCustomUserAttribute("pets", json)
}

추가

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
val json = JSONObject()
    .put("\$add", JSONArray()
        .put(JSONObject()
            .put("id", 3)
            .put("type", "dog")
            .put("breed", "corgi")
            .put("name", "Doug"))
        .put(JSONObject()
            .put("id", 4)
            .put("type", "fish")
            .put("breed", "salmon")
            .put("name", "Larry"))
        .put(JSONObject()
            .put("id", 5)
            .put("type", "bird")
            .put("breed", "parakeet")
            .put("name", "Mary")
        )
    )

braze.getCurrentUser { user ->
    user.setCustomUserAttribute("pets", json, true)
}

업데이트

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
val json = JSONObject()
    .put("\$update", JSONArray()
        .put(JSONObject()
            .put("\$identifier_key", "id")
            .put("\$identifier_value", 4)
            .put("\$new_object", JSONObject()
                .put("breed", "goldfish")
            )
        )
        .put(JSONObject()
            .put("\$identifier_key", "id")
            .put("\$identifier_value", 5)
            .put("\$new_object", JSONObject()
                .put("name", "Annette")
            )
        )
    )

braze.getCurrentUser { user ->
    user.setCustomUserAttribute("pets", json, true)
}

삭제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
val json = JSONObject()
    .put("\$remove", JSONArray()
        .put(JSONObject()
            .put("\$identifier_key", "id")
            .put("\$identifier_value", 1)
        )
        .put(JSONObject()
            .put("\$identifier_key", "id")
            .put("\$identifier_value", 2)
        )
        .put(JSONObject()
            .put("\$identifier_key", "type")
            .put("\$identifier_value", "dog")
        )
    )

braze.getCurrentUser { user ->
    user.setCustomUserAttribute("pets", json, true)
}

생성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
let json: [[String: Any?]] = [
  [
    "id": 1,
    "type": "dog",
    "breed": "beagle",
    "name": "Gus"
  ],
  [
    "id": 2,
    "type": "cat",
    "breed": "calico",
    "name": "Gerald"
  ]
]

braze.user.setCustomAttribute(key: "pets", array: json)

추가

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
let json: [String: Any?] = [
  "$add": [
    [
      "id": 3,
      "type": "dog",
      "breed": "corgi",
      "name": "Doug"
    ],
    [
      "id": 4,
      "type": "fish",
      "breed": "salmon",
      "name": "Larry"
    ],
    [
      "id": 5,
      "type": "bird",
      "breed": "parakeet",
      "name": "Mary"
    ]
  ]
]

braze.user.setCustomAttribute(key: "pets", dictionary: json, merge: true)

업데이트

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
let json: [String: Any?] = [
  "$update": [
    [
      "$identifier_key": "id",
      "$identifier_value": 4,
      "$new_object": [
        "breed": "goldfish"
      ]
    ],
    [
      "$identifier_key": "id",
      "$identifier_value": 5,
      "$new_object": [
        "name": "Annette"
      ]
    ]
  ]
]

braze.user.setCustomAttribute(key: "pets", dictionary: json, merge: true)

삭제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
let json: [String: Any?] = [
  "$remove": [
    [
      "$identifier_key": "id",
      "$identifier_value": 1,
    ],
    [
      "$identifier_key": "id",
      "$identifier_value": 2,
    ],
    [
      "$identifier_key": "type",
      "$identifier_value": "dog",
    ]
  ]
]

braze.user.setCustomAttribute(key: "pets", dictionary: json, merge: true)

생성

1
2
3
4
5
6
7
8
9
10
11
12
13
import * as braze from "@braze/web-sdk";
const json = [{
  "id": 1,
  "type": "dog",
  "breed": "beagle",
  "name": "Gus"
}, {
  "id": 2,
  "type": "cat",
  "breed": "calico",
  "name": "Gerald"
}];
braze.getUser().setCustomUserAttribute("pets", json);

추가

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import * as braze from "@braze/web-sdk";
const json = {
  "$add": [{
    "id":  3,
    "type":  "dog",
    "breed":  "corgi",
    "name":  "Doug",
  }, {
    "id":  4,
    "type":  "fish",
    "breed":  "salmon",
    "name":  "Larry",
  }, {
    "id":  5,
    "type":  "bird",
    "breed":  "parakeet",
    "name":  "Mary",
  }]
};
braze.getUser().setCustomUserAttribute("pets", json, true);

업데이트

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import * as braze from "@braze/web-sdk";
const json = {
  "$update": [
    {
      "$identifier_key": "id",
      "$identifier_value": 4,
      "$new_object": {
        "breed": "goldfish"
      }
    },
    {
      "$identifier_key": "id",
      "$identifier_value": 5,
      "$new_object": {
        "name": "Annette"
      }
    }
  ]
};
braze.getUser().setCustomUserAttribute("pets", json, true);

삭제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import * as braze from "@braze/web-sdk";
const json = {
  "$remove": [
    {
      "$identifier_key": "id",
      "$identifier_value": 1,
    },
    {
      "$identifier_key": "id",
      "$identifier_value": 2,
    },
    {
      "$identifier_key": "type",
      "$identifier_value": "dog",
    }
  ]
};
braze.getUser().setCustomUserAttribute("pets", json, true);

액체 템플릿

pets 배열을 사용하여 메시지를 맞춤 설정할 수 있습니다. 다음 Liquid 템플릿 예제에서는 앞의 API 요청에서 저장된 사용자 지정 속성 개체 속성을 참조하여 메시징에 사용하는 방법을 보여 줍니다.

1
2
3
4
5
{% assign pets = {{custom_attribute.${pets}}} %} 
 
{% for pet in pets %}
I have a {{pet.type}} named {{pet.name}}! They are a {{pet.breed}}.
{% endfor %} 

이 시나리오에서는 Liquid를 사용하여 pets 배열을 반복하고 각 애완동물에 대한 문을 인쇄할 수 있습니다. pets 사용자 지정 속성에 변수를 할당하고 점 표기법을 사용하여 객체의 속성에 액세스합니다. 개체 이름 뒤에 마침표 . 를 붙인 다음 속성 이름을 지정합니다.

세분화

객체 배열을 기반으로 사용자를 세그먼트화할 때 배열의 객체가 조건과 일치하는 경우 사용자는 세그먼트에 대한 자격을 얻게 됩니다.

새 세그먼트를 만들고 중첩된 사용자 지정 속성을 필터로 선택합니다. 그런 다음 개체 배열의 이름을 검색하고 선택합니다.

개체 배열로 필터링

점 표기법을 사용하여 개체 배열에서 사용할 필드를 지정합니다. 빈 대괄호( [] )로 텍스트 필드를 시작하여 Braze에 객체 배열 내부를 보고 있음을 알립니다. 그런 다음 마침표 . 를 추가한 다음 사용하려는 필드 이름을 입력합니다.

예를 들어 type 필드를 기준으로 pets 개체 배열을 필터링하려면 [].type 을 입력하고 필터링할 애완동물 유형(예: snake)을 선택합니다.

반려동물 유형별 필터링은 뱀과 동일

또는 dogtype 를 가진 반려동물을 필터링할 수도 있습니다. 여기서 사용자는 반려견을 한 마리 이상 키우고 있으므로 ‘반려견을 한 마리 이상 키우는 모든 사용자’라는 세그먼트에 해당합니다.

반려동물 유형별 필터링: 개

중첩 수준

최대 한 단계의 배열 중첩(다른 배열 내의 배열)으로 세그먼트를 만들 수 있습니다. 예를 들어 다음 속성이 주어지면 pets[].name 포함 Gus 에 대한 세그먼트는 만들 수 있지만 pets[].nicknames[] 포함 Gugu 에 대한 세그먼트는 만들 수 없습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
{
  "attributes": [
    {
      "external_id": "user_id",
      "pets": [
        {
          "id": 1,
          "type": "dog",
          "breed": "beagle",
          "name": "Gus",
          "nicknames": [
            "Gugu",
            "Gusto"
          ]
        },
        {
          "id": 2,
          "type": "cat",
          "breed": "calico",
          "name": "Gerald",
          "nicknames": [
            "GeGe",
            "Gerry"
          ]
        }
      ]
    }
  ]
}

데이터 포인트

데이터 포인트는 속성 생성, 업데이트 또는 제거 여부에 따라 다르게 소비됩니다.

새 배열을 만들면 객체의 각 속성에 대해 하나의 데이터 포인트가 소모됩니다. 이 예제에는 8개의 데이터 포인트가 필요하며, 각 애완동물 개체에는 4개의 속성이 있고 2개의 개체가 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
{
  "attributes": [
    {
      "external_id": "user_id",
      "pets": [
        {
          "id": 1,
          "type": "dog",
          "breed": "beagle",
          "name": "Gus"
        },
        {
          "id": 2,
          "type": "cat",
          "breed": "calico",
          "name": "Gerald"
        }
      ]
    }
  ]
}

기존 배열을 업데이트하면 추가되는 속성마다 데이터 포인트가 하나씩 소모됩니다. 이 예제에서는 두 개체에서 각각 하나의 속성만 업데이트하므로 두 개의 데이터 포인트가 필요합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
{
  "attributes": [
    {
      "external_id": "user_id",
      "_merge_objects": true,
      "pets": {
        "$update": [
          {
            "$identifier_key": "id",
            "$identifier_value": 4,
            "$new_object": {
              "breed": "goldfish"
            }
          },
          {
            "$identifier_key": "id",
            "$identifier_value": 5,
            "$new_object": {
              "name": "Annette"
            }
          }
        ]
      }
    }
  ]
}

배열에서 개체를 제거하면 전송하는 제거 기준마다 하나의 데이터 포인트가 소모됩니다. 이 예제에서는 이 문으로 여러 개의 개를 제거하더라도 데이터 포인트가 3개 필요합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
{
  "attributes": [
    {
      "external_id": "user_id",
      "pets": {
        "$remove": [
          // Remove by ID
          {
            "$identifier_key": "id",
            "$identifier_value": 1
          },
          {
            "$identifier_key": "id",
            "$identifier_value": 2
          },
          // Remove any dog
          {
            "$identifier_key": "type",
            "$identifier_value": "dog"
          }
        ]
      }
    }
  ]
}
이 페이지가 얼마나 도움이 되었나요?
New Stuff!