x


[Solved - Mostly] Hashtables, Arrays, Json and Slicing

So I've got a builtin array to store integers, its declared and initiated fine.

private var invID = new int[4]; 
invID = [0,1,2,3];

I've got a www call that pulls down some json information that is then parsed into a hashtable.

{    "slot1": {
       "name": "Value1",
        "id": 3
     },
     "slot2": {
       "name": "Value2",
        "id": 2
     },
     "slot3": {
       "name": "Value3",
        "id": 1
     },
     "slot4": {
       "name": "Value4",
        "id": 2
     }
}


var jsonHash=JSON.ParseJSON(data_get.text);

When I try to set a particular node of the integer array to a value in the hashtable I get the error.

Type 'Object' does not support slicing.

The code to set the values is as follows;

invID[0] = int.Parse(jsonHash["slot1"]["id"]);
invID[1] = int.Parse(jsonHash["slot2"]["id"]);
invID[2] = int.Parse(jsonHash["slot3"]["id"]);
invID[3] = int.Parse(jsonHash["slot4"]["id"]);

What am I missing? What exactly is slicing?

I'm not trying to set a multi-dimensional array, simply pull a data value out of it.

Do hashtables support MD? I found some examples on the unity forums that seem to show it.

Update: I don't understand why but I think I found a workaround for this.

You have to cast the sub level hashtables again, for some reason its losing its definition from the called script.

var tempHash : Hashtable = jsonHash["slot1"];
invID[0] = int.Parse(tempHash["id"]);

Works successfully, but it kind of defeats the point if it requires all the extra code lines anyways.

I ran into the same problem trying to pass a Hashtable into a function, it seems to revert to object status anywhere outside of local context.

more ▼

asked May 14 '12 at 03:51 AM

Vengent gravatar image

Vengent
19 2 4 6

(comments are locked)
10|3000 characters needed characters left

1 answer: sort voted first

Looking at your code,one immediate thought is that int.Parse() is used to convert a string to an in int ... however, your JSON data looks like the "id" property is already an int. It strikes me that a code fragment such as the following should be tried:

invID[0] = jsonHash["slot1"].id;
more ▼

answered May 14 '12 at 04:03 AM

kolban gravatar image

kolban
1.8k 2 7

Used the int.parse because I kept getting casting errors from object to int.

Using

invID[0] = jsonHash["slot1"].id;

Results in;

'id' is not a member of 'Object'.

removing the int parse and just using;

invID[0] = jsonHash["slot1"]["id"];

Gets the same slicing error.

May 14 '12 at 04:07 AM Vengent

Hmmm ... it feels like the "jsonHash" method takes a 1 dimensional parameter which is used as the key to get the value. The value being returned is a JavaScript Object of generic type "Object". However, we want the property called "id" which is not a property of a generic object. We seem to be using a class called JSON which has a static method called "ParseJSON". Where is that class defined?

May 14 '12 at 04:15 AM kolban

It's a script I found on the forums;

http://forum.unity3d.com/threads/38273-Lightweight-UnityScript-XML-parser?p=547281&viewfull=1#post547281

It may be the problem, but I think its something in my syntax, just don't understand what.

May 14 '12 at 04:29 AM Vengent
(comments are locked)
10|3000 characters needed characters left
Your answer
toggle preview:

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Topics:

x3570
x1396
x58

asked: May 14 '12 at 03:51 AM

Seen: 1045 times

Last Updated: May 14 '12 at 09:26 PM