Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
J
json
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Libraries
json
Commits
8d9c2bea
Commit
8d9c2bea
authored
Jan 11, 2015
by
Niels
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
+ applied style guide
parent
80b5db16
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
53 additions
and
5 deletions
+53
-5
.travis.yml
.travis.yml
+1
-1
header_only/json.h
header_only/json.h
+49
-2
src/json.cc
src/json.cc
+3
-2
No files found.
.travis.yml
View file @
8d9c2bea
...
...
@@ -24,4 +24,4 @@ after_success:
-
make clean
-
make json_unit CXXFLAGS="-fprofile-arcs -ftest-coverage"
-
./json_unit
-
coveralls --exclude benchmark --exclude test --gcov-options '\-lp' --gcov 'gcov-4.8'
-
coveralls --exclude benchmark --exclude test --
exclude header_only --
gcov-options '\-lp' --gcov 'gcov-4.8'
header_only/json.h
View file @
8d9c2bea
...
...
@@ -165,7 +165,10 @@ class json
/// dump the object (with pretty printer)
std
::
string
dump
(
const
bool
,
const
unsigned
int
,
unsigned
int
=
0
)
const
noexcept
;
/// replaced a character in a string with another string
void
replaceChar
(
std
::
string
&
str
,
char
c
,
const
std
::
string
&
replacement
)
const
;
/// escapes special characters to safely dump the string
std
::
string
escapeString
(
const
std
::
string
&
)
const
;
public:
/// explicit value conversion
template
<
typename
T
>
...
...
@@ -935,7 +938,7 @@ std::string json::dump(const bool prettyPrint, const unsigned int indentStep,
{
case
(
value_type
:
:
string
)
:
{
return
std
::
string
(
"
\"
"
)
+
*
value_
.
string
+
"
\"
"
;
return
std
::
string
(
"
\"
"
)
+
escapeString
(
*
value_
.
string
)
+
"
\"
"
;
}
case
(
value_type
:
:
boolean
)
:
...
...
@@ -1032,6 +1035,50 @@ std::string json::dump(const bool prettyPrint, const unsigned int indentStep,
}
}
/*!
Internal function to replace all occurrences of a character in a given string
with another string.
\param str the string that contains tokens to replace
\param c the character that needs to be replaced
\param replacement the string that is the replacement for the character
*/
void
json
::
replaceChar
(
std
::
string
&
str
,
char
c
,
const
std
::
string
&
replacement
)
const
{
size_t
start_pos
=
0
;
while
((
start_pos
=
str
.
find
(
c
,
start_pos
))
!=
std
::
string
::
npos
)
{
str
.
replace
(
start_pos
,
1
,
replacement
);
start_pos
+=
replacement
.
length
();
}
}
/*!
Escapes all special characters in the given string according to ECMA-404.
Necessary as some characters such as quotes, backslashes and so on
can't be used as is when dumping a string value.
\param str the string that should be escaped.
\return a copy of the given string with all special characters escaped.
*/
std
::
string
json
::
escapeString
(
const
std
::
string
&
str
)
const
{
std
::
string
result
(
str
);
// we first need to escape the backslashes as all other methods will insert
// legitimate backslashes into the result.
replaceChar
(
result
,
'\\'
,
"
\\\\
"
);
// replace all other characters
replaceChar
(
result
,
'"'
,
"
\\\"
"
);
replaceChar
(
result
,
'\n'
,
"
\\
n"
);
replaceChar
(
result
,
'\r'
,
"
\\
r"
);
replaceChar
(
result
,
'\f'
,
"
\\
f"
);
replaceChar
(
result
,
'\b'
,
"
\\
b"
);
replaceChar
(
result
,
'\t'
,
"
\\
t"
);
return
result
;
}
/*!
Serialization function for JSON objects. The function tries to mimick Python's
\p json.dumps() function, and currently supports its \p indent parameter.
...
...
src/json.cc
View file @
8d9c2bea
...
...
@@ -598,10 +598,11 @@ with another string.
\param replacement the string that is the replacement for the character
*/
void
json
::
replaceChar
(
std
::
string
&
str
,
char
c
,
const
std
::
string
&
replacement
)
const
const
{
size_t
start_pos
=
0
;
while
((
start_pos
=
str
.
find
(
c
,
start_pos
))
!=
std
::
string
::
npos
)
{
while
((
start_pos
=
str
.
find
(
c
,
start_pos
))
!=
std
::
string
::
npos
)
{
str
.
replace
(
start_pos
,
1
,
replacement
);
start_pos
+=
replacement
.
length
();
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment