All challenges
Easy 0 solved 0% acceptance

Sum a Flat JSON Object

Parse a flat JSON object whose values are integers and add up the values.

What you'll learn

  • Read key-value pairs from JSON text
  • Handle spaces and negative numbers
  • Sum values in a 64-bit integer

Problem

Programs often receive JSON such as {"apples": 3, "pears": 5}. Libraries like System.Text.Json parse it for you, but parsing a simple case by hand shows how the format works.

The input is a flat JSON object: {, then zero or more "key": value pairs separated by commas, then }. Keys are quoted and contain no quotes, commas or colons; values are integers, possibly negative. Spaces may appear around any of the symbols.

Implement sum_json_numbers(text).

Input

text: The JSON object.

Output

Return the sum of all values (0 for an empty object).

Constraints

2 ≤ length of text ≤ 100,000

At most 10,000 pairs; every value and the sum fit in a 64-bit integer

Examples

Example 1
Input:
text = "{\"apples\": 3, \"pears\": 5}"

Expected output:
expected = 8
Input:
std::string text = "{\"apples\": 3, \"pears\": 5}";

Expected output:
long long expected = 8;
Input:
string text = "{\"apples\": 3, \"pears\": 5}";

Expected output:
long expected = 8;

Explanation

3 + 5 = 8.

Example 2
Input:
text = "{ \"debt\" : -20 , \"cash\":15 }"

Expected output:
expected = -5
Input:
std::string text = "{ \"debt\" : -20 , \"cash\":15 }";

Expected output:
long long expected = -5;
Input:
string text = "{ \"debt\" : -20 , \"cash\":15 }";

Expected output:
long expected = -5;

Explanation

Spaces around the symbols do not matter: −20 + 15 = −5.

How to approach it

Try on your own first, then open one hint at a time.

Hint 1

Remove the braces, then split the pairs at commas.

Hint 2

Each value is the text after the colon; trim spaces before converting.

Hint 3

Use a 64-bit integer and return 0 for an empty object.

Expected complexity

O(length of text) time, O(1) extra space

References

This challenge is adapted for CodeUtility. Follow the statement and constraints above.

Learn from others

Community solutions

No published solutions yet. Solve this challenge to share the first one.