Skip to content

Commit 9b05d1a

Browse files
committed
Merge remote-tracking branch 'linux/devlocal' into development
2 parents 0c1160d + 46f9074 commit 9b05d1a

File tree

3 files changed

+26
-3
lines changed

3 files changed

+26
-3
lines changed

Release/src/json/json_parsing.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -920,6 +920,7 @@ std::unique_ptr<web::json::details::_Object> JSON_Parser<CharType>::_ParseObject
920920
GetNextToken(tkn);
921921

922922
auto obj = utility::details::make_unique<web::json::details::_Object>();
923+
auto& elems = obj->m_object.m_elements;
923924

924925
if ( tkn.kind != JSON_Parser<CharType>::Token::TKN_CloseBrace )
925926
{
@@ -951,9 +952,9 @@ std::unique_ptr<web::json::details::_Object> JSON_Parser<CharType>::_ParseObject
951952
auto fieldValue = _ParseValue(tkn);
952953
auto type = fieldValue->type();
953954

954-
obj->m_object.m_elements.emplace_back(utility::conversions::to_string_t(fieldName), json::value(std::move(fieldValue), type));
955+
elems.emplace_back(utility::conversions::to_string_t(fieldName), json::value(std::move(fieldValue), type));
955956
#else
956-
obj->m_object.m_elements.emplace_back(utility::conversions::to_string_t(fieldName), json::value(_ParseValue(tkn)));
957+
elems.emplace_back(utility::conversions::to_string_t(fieldName), json::value(_ParseValue(tkn)));
957958
#endif
958959

959960
// State 4: Looking for a comma or a closing brace
@@ -975,6 +976,8 @@ std::unique_ptr<web::json::details::_Object> JSON_Parser<CharType>::_ParseObject
975976

976977
GetNextToken(tkn);
977978

979+
::std::sort(elems.begin(), elems.end(), json::object::compare_pairs);
980+
978981
return obj;
979982

980983
error:

Release/tests/Functional/http/client/outside_tests.cpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,13 @@ TEST_FIXTURE(uri_address, outside_ssl_json,
118118
}).then([=](json::value jsonArray)
119119
{
120120
int count = 0;
121-
auto& items = jsonArray[U("items")];
121+
json::object& obj = jsonArray.as_object();
122+
123+
VERIFY_ARE_NOT_EQUAL(obj.find(U("pageInfo")), obj.end());
124+
VERIFY_ARE_NOT_EQUAL(obj.find(U("items")), obj.end());
125+
126+
auto& items = obj[U("items")];
127+
122128
for(auto iter = items.as_array().cbegin(); iter != items.as_array().cend(); ++iter)
123129
{
124130
const auto& i = *iter;

Release/tests/Functional/json/parsing_tests.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -498,6 +498,20 @@ TEST(deeply_nested)
498498
VERIFY_PARSING_THROW(json::value::parse(strBad));
499499
}
500500

501+
TEST(parse_object)
502+
{
503+
utility::stringstream_t ss;
504+
ss << U("{\"z\":2, \"a\":1}");
505+
json::value v = json::value::parse(ss);
506+
auto& obj = v.as_object();
507+
508+
VERIFY_ARE_NOT_EQUAL(obj.find(U("a")), obj.end());
509+
VERIFY_ARE_NOT_EQUAL(obj.find(U("z")), obj.end());
510+
VERIFY_ARE_EQUAL(obj["a"], 1);
511+
VERIFY_ARE_EQUAL(obj["z"], 2);
512+
VERIFY_ARE_EQUAL(obj.size(), 2);
513+
}
514+
501515
} // SUITE(parsing_tests)
502516

503517
}}}

0 commit comments

Comments
 (0)