0

I have the following Javascript object:

var o = {
      "username":"username",
      "args": [
          "1", "2", "3"
      ]
};

And send it like:

xhr.send(JSON.stringify(o));

My java class:

public class Command implements Serializable {
    private String username;
    private String[] args;
    //getters, setters constructors etc.
}

And in my servlet:

@Override
public void doPost(HttpServletRequest request, HttpServletResponse response){
    Command c;

    try {
        c = gson.fromJson(request.getReader(), Command.class);
    } catch(Exception e) {
            .
            .
            .

Gives the error: Expected BEGIN_ARRAY but was STRING at line 1 column X, where column number X is where the "[ appears in stringified JSON.

From what I understand this should be a very simple and straightforward thing. What am I doing wrong?

EDIT: I think it may be related to JSON.stringify() behavior with Javascript arrays of strings.

JSON.stringify(o) returns:

"{"username":"username","args":"[\"1\", \"2\", \"3\"]"}"
3
  • Yes: your "args" property is a string, not an array Commented Aug 21, 2014 at 12:23
  • What do you exactly mean by it? Commented Aug 21, 2014 at 12:33
  • The value starts with a quote, not a bracket Commented Aug 21, 2014 at 12:45

2 Answers 2

2

Normal JavaScript arrays are designed to hold data with numeric indexes. Try using Object instead of an array.

Try using the below code for constructing the object and check the output :

var o = {};           // Object
o['username'] = 'username';
o['args'] = [];          // Array
o['args'].push('1');
o['args'].push('2');
o['args'].push('3');
var json = JSON.stringify(o);
alert(json);
Sign up to request clarification or add additional context in comments.

3 Comments

I think it's not valid Javascript.
Sorry about the previous answer
It's not related to character encoding. It's related to JSON.stringify function with string arrays I think.
2

I think you have one too many quotes in your stringify result. When I construct the object like this:

 var o = {
            username: "username",
            args: ["1","2","3"]
        };

the result from calling JSON.stringify(o)

is this

"{\"username\":\"username\",\"args\":[\"1\",\"2\",\"3\"]}"

notice there are no quotes around my square brackets.

2 Comments

Both IE 11 and Opera consoles give me the result with too many quotes.
that's strange because I am using IE 11. I tested in Chrome and received the same results.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.