2013-03-19 12 views
10

Potrzebuję przekonwertować odpowiedź XML na JSON.XML do konwersji JSON w iOS

Moja odpowiedź XML:

<commands> 
<command id="0" name="GetAPPsProducts"> 
    <command_parameters> 
    <command_parameter id="0" name="APPs_Code">ATAiOS</command_parameter> 
    </command_parameters> 
    <command_result> 
    <apps_products> 
     <apps_products id="1"> 
     <apps_code>ATAiOS</apps_code> 
     <apps_product_id>2</apps_product_id> 
     <brand_id>2</brand_id> 
     <brand_desc>Generic</brand_desc> 
     <brand_product_id>2</brand_product_id> 
     <product_id>001-7</product_id> 
     <descrizione>MyTravelApp</descrizione> 
     </apps_products> 
    </apps_products> 
    </command_result> 
</command> 

Używam XMLReader wspieranie plik z tej strony:

XMLReader

używam tego kodu, aby przekonwertować XML do JSON

NSError *parseError = nil; 
NSDictionary *xmlDictionary = [XMLReader dictionaryForXMLString:testXMLString error:&parseError]; 
NSLog(@" %@", xmlDictionary); 

Dostałem odpowiedź JSON tak:

commands =   { 
     command =    { 
      "command_parameters" =     { 
       "command_parameter" =      { 
        id = 0; 
        name = "APPs_Code"; 
        text = "\n \n \n  \n  ATAiOS"; 
       }; 
       text = "\n  "; 
      }; 
      "command_result" =     { 
       "apps_products" =      { 
        "apps_products" =       { 
         "apps_code" =        { 
          text = "\n  \n  \n   \n   ATAiOS"; 
         }; 
         "apps_product_id" =        { 
          text = "\n   2"; 
         }; 
         "brand_desc" =        { 
          text = "\n   Generic"; 
         }; 
         "brand_id" =        { 
          text = "\n   2"; 
         }; 
         "brand_product_id" =        { 
          text = "\n   2"; 
         }; 
         descrizione =        { 
          text = "\n   MyTravelApp"; 
         }; 
         id = 1; 
         "product_id" =        { 
          text = "\n   001-7"; 
         }; 
         text = "\n   "; 
        }; 
        text = "\n  "; 
       }; 
       text = "\n  "; 
      }; 
      id = 0; 
      name = GetAPPsProducts; 
      text = "\n "; 
     }; 
     text = "\n "; 
    }; 
    text = "\n \n"; 
}; 

muszę odpowiedź tak:

{ 
    "commands": { 
    "command": { 
     "-id": "0", 
     "-name": "GetAPPsProducts", 
     "command_parameters": { 
     "command_parameter": { 
      "-id": "0", 
      "-name": "APPs_Code", 
      "#text": "ATAiOS" 
     } 
     }, 
     "command_result": { 
     "apps_products": { 
      "apps_products": { 
      "-id": "1", 
      "apps_code": "ATAiOS", 
      "apps_product_id": "2", 
      "brand_id": "2", 
      "brand_desc": "Generic", 
      "brand_product_id": "2", 
      "product_id": "001-7", 
      "descrizione": "MyTravelApp" 
      } 

uzyskać to odpowiedź podczas konwersji w Internecie. Jak uzyskać taką odpowiedź.

Dzięki z góry.

+0

Jest niczym innym słowniku reprezentacji, można konwertować dane do słownika po parsowania wartości od xml, ale pytanie brzmi, dlaczego będzie to zrobić, ponieważ będzie ostatecznie mieć do analizowania pliku xml, a do robienia samo dwa razy ..? – iphonic

+0

możliwy duplikat [Jak konwertować ciąg XML do JSON za pomocą iPhone'a sdk] (http://stackoverflow.com/questions/6354159/how-to-convet-xml-string-to-json-using-iphone-sdk) –

+0

Użyj kodu @ Ryana, działa dobrze. –

Odpowiedz

11
NSError *parseError = nil; 
NSDictionary *xmlDictionary = [XMLReader dictionaryForXMLString:testXMLString error:&parseError]; 
NSLog(@" %@", xmlDictionary); 

Ten kod nie konwertuje niczego do JSON. To daje ci NSDictionary. Musisz faktycznie utworzyć dane JSON ze słownika. Wypróbuj to dla rozmiaru.

NSError *error; 
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:xmlDictionary 
                options:NSJSONWritingPrettyPrinted // Pass 0 if you don't care about the readability of the generated string 
                error:&error]; 

if (! jsonData) { 
    NSLog(@"Got an error: %@", error); 
} else { 
    NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; 

    NSLog(@"%@",jsonString); 
} 
+1

Przetestowałem Twój kod, działa jak czar, dzięki za odpowiedź. –

+0

Cieszę się, że mogę pomóc. Happy Coding :) Nie zapomnij przyjąć odpowiedzi. –

+1

@RyanPoolos Im potrzebuję pomocy ... Otrzymuję to: 'Code = -1016" Oczekiwany typ zawartości {( "text/json", "application/json", "text/javascript" )}, ale text/xml "UserInfo = 0x17f9e770 {NSErrorFailingURLKey = http: //server.com/sw_icfs.asmx/Response_Sucursales? Cli_Cod = 1 & Key_String = hW9gvga8ieDBbM5wm4, NSLocalizedDescription = Oczekiwany typ zawartości {( " text/json ", " application/json " , "text/javascript" )}, dostałem text/xml} 'any ideas? :) – marciokoko