2016-08-05 3 views
1

나는 QJsonDocument documentation을 읽고있다 그리고 난 다음 라인 QJsonDocument을 사용QJsonDocument :: 배열()와 QJsonDocument :: 개체()

emit this->ueSignalNewDataArrivedPlaces(QJsonDocument::fromBinaryData(incomingData[0].toByteArray())); 

나는 내가 QJsonDocument::array()를 사용해야합니다,이 선 후, 이해가 안 돼요 또는 QJsonDocument::object(), 즉 어떤 상황에서 QJsonDocumentarray을 생성하고 어떤 상황에서 object을 생성합니까?

답변

3

JSON 배열이 정렬 된 목록, 다음과 같이 작성된다 : JSON 오브젝트 같이 작성된라는 목록이다

[ <item1>, <item2>, <item3> ] 

동안 :

{ 
    <name1>: <item1>, 
    <name2>: <item2> 
} 

Qt를에서는 QJsonArray가 동등 QVariantList (QList<QVariant>) 및 QJsonObjectQVariantMap (QMap<QString, QVariant>)과 같습니다.

당신이 사용해야하는 파일은 파싱 할 파일에 따라 다릅니다. 위키 백과의 예를 복용 예를 들어 :

{ 
    "firstName": "John", 
    "lastName": "Smith", 
    "isAlive": true, 
    "age": 25, 
    "address": { 
    "streetAddress": "21 2nd Street", 
    "city": "New York", 
    "state": "NY", 
    "postalCode": "10021-3100" 
    }, 
    "phoneNumbers": [ 
    { 
     "type": "home", 
     "number": "212 555-1234" 
    }, 
    { 
     "type": "office", 
     "number": "646 555-4567" 
    }, 
    { 
     "type": "mobile", 
     "number": "123 456-7890" 
    } 
    ], 
    "children": [], 
    "spouse": null 
} 

당신은 phoneNumbers의 목록을 얻을 수있는 QJsonArray을 사용, phoneNumbers의 각 요소는 2 개라는 값에 whith QJsonObject이다 typenumber.

당신이 JSON 요소를 조작해야하지만 당신은 그 형태를 인식하지 않는 코드의 경우 중 하나입니다 QJsonValue 사용할 수 있습니다 : 그건, QJsonObject, QJsonArray, bool, double 또는 QString

+0

흠을! 'json' 데이터 소스가 "하나의 레코드"만을 포함하고 있다면'QJsonArray' 대신에'QJsonObject'가 생성되었다고 생각했습니다. – KernelPanic

+0

'isObject()'와'isArray()'둘 다'true'를 반환한다면 "유효하지 않은"'json' 포맷을 확신 할 수 있습니까? – KernelPanic

+1

@ Kernelpanic 두 가지 모두를 되돌릴 수는 없습니다. 루트 요소는 배열과 객체가 될 수 없습니다. Qt 소스에서'QJsonDocument :: isArray()'는 인라인'bool isArray()로 구현 된'QJsonPrivate :: Base :: isArray()'를 호출합니다. const {return! isObject(); }'. 또한'QJsonDocument :: isNull()'과'QJsonDocument :: fromJson()'의 두 번째 매개 변수로 유효하지 않은 JSON을 확인할 수 있습니다. –

관련 문제