Json [ ] Type
Json [ ] Type으로 저장이 가능한 형태
- [ { "0": "0.5", "1": "0.3" }, { "0": "0.5", "1": "0.3", "2": "1.0" } ]
- [ [ "0.5", "0.3" ], [ "0.5", "0.3" ] ]
- 배열 : [1, 2, 3, 4, 5]
- 배열 안에 객체 : ["apple", "banana", "cherry"]
- 배열 안에 다른 배열 : [ ["red", "green", "blue"], ["circle", "square", "triangle"] ]
- 배열 안에 혼합 데이터 : [ 1, "apple", { "name": "John", "age": 30
}, ["red", "green", "blue"] ]
Json [ ] Type으로 저장이 불가능한 형태
- [ [ "0.5", "0.3" ], [ "0.5" ] ]
malformed array error
- 저장이 불가능한 형태의 예시를 보면, 배열 안에 두 개의 배열이 들어있는 형태이다. 그러나 두 개의 배열의 서로 길이가 다르기 때문에 올바른 Json 배열로 볼 수 없다.
- Json 배열에 올바르게 데이터를 삽입하려면, 모든 하위 배열의 길이가 동일해야 한다.
- 즉, [ ["0.5", "0.9"], ["0.0", "0.8"], ["0.0", "0.8"], ["0.0", "0.8"], ["0.0", "0.8"] ] 형태의 배열은 Json 배열에 저장이 가능하다.
- 하지만, [ ["0.5", "0.9"], ["0.0", "0.8"], ["0.0", "0.8"], ["0.0"] ]은 하위 배열의 길이가 다르기 때문에 Json 배열에 삽입하려는 경우 malformed array error가 발생한다.
문제 원인
- 저장하려는 데이터는 배열 안에 배열인 형식이었는데, 하위 배열들의 길이는 랜덤이었기 때문에 특정 경우에만 malformed array 오류가 발생했다.
- 그래서 저장하려는 하위 배열들을 객체로 바꾼 후에 insert를 하니 error 없이 진행되었다.
- { ...Arr } : 스프레드 연산자로 배열을 푸르고 객체로 감싸면, 배열의 인덱스 값이 키값인 객체가 된다.
- 그리고 사용할 때는 배열의 형태로 사용해야 하기 때문에 객체를 배열로 바꾸는 작업을 한 번 진행해서 사용했다.
- Object.values(객체) : 객체의 value로 배열을 만들어 주는 메소드