2014-02-12 1 views
0

MtGox 티커에서 json을 파싱하려고합니다. http://data.mtgox.com/api/2/BTCUSD/money/tickerServiceStack.Text wrong Json Parsing

동일한 결과로 두 가지 방법을 시도했습니다.

  1. 된 JSONObject D1 = JsonSerializer.DeserializeString (downloadeddata)
  2. 된 JSONObject D2 = JsonObject.Parse (downloadeddata)

I 완벽하게 나타나는 D1 [ "데이터"]에 액세스하려고 직렬화에 대한 문자열 =>

{ 
    [data, { 
      "high" : { 
       "value" : "600.00000", 
       "value_int" : "60000000", 
       "display" : "$600.00", 
       "display_short" : "$600.00", 
       "currency" : "USD" 
      }, 
      "low" : { 
       "value" : "515.00000", 
       "value_int" : "51500000", 
       "display" : "$515.00", 
       "display_short" : "$515.00", 
       "currency" : "USD" 
      }, 
      "avg" : { 
       "value" : "557.60317", 
       "value_int" : "55760317", 
       "display" : "$557.60", 
       "display_short" : "$557.60", 
       "currency" : "USD" 
      }, 
      "vwap" : { 
       "value" : "554.60404", 
       "value_int" : "55460404", 
       "display" : "$554.60", 
       "display_short" : "$554.60", 
       "currency" : "USD" 
      }, 
      "vol" : { 
       "value" : "20623.02466981", 
       "value_int" : "2062302466981", 
       "display" : "20,623.02\u00a0BTC", 
       "display_short" : "20,623.02\u00a0BTC", 
       "currency" : "BTC" 
      }, 
      "last_local" : { 
       "value" : "527.00000", 
       "value_int" : "52700000", 
       "display" : "$527.00", 
       "display_short" : "$527.00", 
       "currency" : "USD" 
      }, 
      "last_orig" : { 
       "value" : "527.00000", 
       "value_int" : "52700000", 
       "display" : "$527.00", 
       "display_short" : "$527.00", 
       "currency" : "USD" 
      }, 
      "last_all" : { 
       "value" : "527.00000", 
       "value_int" : "52700000", 
       "display" : "$527.00", 
       "display_short" : "$527.00", 
       "currency" : "USD" 
      }, 
      "last" : { 
       "value" : "527.00000", 
       "value_int" : "52700000", 
       "display" : "$527.00", 
       "display_short" : "$527.00", 
       "currency" : "USD" 
      }, 
      "buy" : { 
       "value" : "525.50002", 
       "value_int" : "52550002", 
       "display" : "$525.50", 
       "display_short" : "$525.50", 
       "currency" : "USD" 
      }, 
      "sell" : { 
       "value" : "526.99999", 
       "value_int" : "52699999", 
       "display" : "$527.00", 
       "display_short" : "$527.00", 
       "currency" : "USD" 
      }, 
      "item" : "BTC", 
      "now" : "1392201806575324" 
     } 
    ] 
} 

그리고이 두 가지 옵션 위 중 하나로 후자의 문자열을 역 직렬화 할 때 내가이

0123를 얻을 수
JsonObject d3 = JsonObject.Parse(d1["data"]); 

Count = 5 
    [0]: {[high:{value:600.00000, value_int:60000000]} 
    [1]: {[display:$600.00, display_short:$600.00]} 
    [2]: {[currency:USD}, low:{value:515.00000]} 
    [3]: {[value_int:51500000, display:$515.00]} 
    [4]: {[display_short:$515.00, currency:USD]} 

진실은 아닙니다. 그리고 저에게이 결과는 틀렸고 json parsable조차도 아닙니다. => {{통화 : 미국 달러}, 낮음 : {값 : 515.00000}}

MS Javascript 시리얼 라이저가 정상적으로 작동합니다.

그래서 내가 뭘 잘못하고 있니?

감사합니다.

+2

모두 동일한 주제에 작업? 이것이 내가 시세를 파헤 치려고했던 세 번째 질문입니다. 전체 수업에 대한 답을 보낼 수있는 방법이 있습니까? – I4V

답변

1

구체적인 클래스로 직렬화를 해제하는 방법에 대해 설명합니다.

var ticker = ServiceStack.Text.JsonSerializer 
         .DeserializeFromString<Ticker.RootObject>(json); 

public class Ticker 
{ 
    public class Value 
    { 
     public string value { get; set; } 
     public string value_int { get; set; } 
     public string display { get; set; } 
     public string display_short { get; set; } 
     public string currency { get; set; } 
    } 

    public class Data 
    { 
     public Value high { get; set; } 
     public Value low { get; set; } 
     public Value avg { get; set; } 
     public Value vwap { get; set; } 
     public Value vol { get; set; } 
     public Value last_local { get; set; } 
     public Value last_orig { get; set; } 
     public Value last_all { get; set; } 
     public Value last { get; set; } 
     public Value buy { get; set; } 
     public Value sell { get; set; } 
     public string item { get; set; } 
     public string now { get; set; } 
    } 

    public class RootObject 
    { 
     public string result { get; set; } 
     public Data data { get; set; } 
    } 
} 
+0

답변 해 주셔서 감사합니다. 나는 그것을 만들었고 실제로는 아주 잘 작동합니다. 그러나 내 질문에 두 번째 코드 섹션 "Count = 5"및 아래로 볼 경우 첫 번째 요소를 "높음"으로 잘못 구문 분석하고 첫 번째 요소 만 구문 분석하는 것을 볼 수 있습니다. 그리고 이것이 제 질문이었습니다. – ChristoD

+0

{0} : {[high : {}]} [1] : {[낮음 : {}} ... 등의 내용을 볼 수 있습니다. – ChristoD