1

I have a JavaScript script which receives information from a Python server. The Python server outputs a list, which is converted to a string prior to being sent to the JavaScript script.

I'd like to be able to convert the received string into a form that can be indexed with JavaScript. Here's an example output string from the Python server:

var Message = [['Word1A', 'Word1B'], ['Word2A', 'Word2B'], ['Word3A', 'Word3B']];

Given the above example, I'd like to be able to query the received string as as an indexed array:

var x;
for (x in Message) {
    alert(x[0]};

The above example should return:

Word1A
Word2A
Word3A

What's the best way to go about this?

4
  • Which part are you having trouble with? Commented Jun 27, 2015 at 13:29
  • Which way you use for data transport? If it is the HTTP protocol and AJAX requests you can add content/type header like it is done here stackoverflow.com/questions/477816/…. And on the client side it will be parsed automatically to JavaScript list or you can insert string into template as JS list. Commented Jun 27, 2015 at 13:41
  • @juanchopanza I'm struggling with how to convert the string into an indexed array. Commented Jun 27, 2015 at 23:56
  • @ErDmKo I'm using websockets, and am only able to emit strings (no lists/arrays). Commented Jun 27, 2015 at 23:56

2 Answers 2

2

You can simply use the json Python module

reply = json.dumps(Message)

to convert the array in a JSON formatted string.

Then on the client side you decode the JSON string with

message = JSON.parse(msg);

and you will get an array of 2-elements arrays

Sign up to request clarification or add additional context in comments.

1 Comment

I really like this approach, but I'm unable to make it work. Python produces a nested list (as per original post); do I need to do anything to it before using the json.dumps() method?
0

This should work,

var Message = [['Word1A', 'Word1B'], ['Word2A', 'Word2B'], ['Word3A', 'Word3B']];
var x;
for (x in Message) {
    alert(Message[x][0]);
}

Editing my answer as per you comments below which says the input would be "['Word1A', 'Word1B'], ['Word2A', 'Word2B'], ['Word3A', 'Word3B']"

Solution being,

var Message = "['Word1A', 'Word1B'], ['Word2A', 'Word2B'], ['Word3A', 'Word3B']";
var array = Message.replace(/,|[|]/g, "").split(" ");
for(var x = 0; x < array.length -1; x=x+2){
 alert(array[x].replace("[","").replace("]",""));
}

I must add, this solution will work but I'm not that fluent with regex, so more optimal solution could be achieved. Hope it helps!

4 Comments

As Message is a string (not an array), this prints each individual letter to the alert console. This would be correct if Message had been converted into a JavaScript array prior to printing.
so you mean the input is, "['Word1A', 'Word1B'], ['Word2A', 'Word2B'], ['Word3A', 'Word3B']"??
Yes that's correct. The input is a list, converted to a string, from Python.
Yes it did, to an extent. I've decided to change my approach for the time being though. Thanks again for all your help!

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.