2015-01-09 4 views
1

에 실패합니다.XML 변환 내가 두 개의 파일이 JSON 리턴 객체

참고 : json의 대안으로 csv로 효과적으로 변환하는 것이 허용 될 수 있습니다. 업데이트 -이 SO answer에서 XMLStarlet을 지원할 수있는 다른 명령 줄 유틸리티가 있습니다. 같은 문제가 발생 모든 경우에 그러나

require "rubygems" 
require "crack" 
require "json" 
require 'pp' 

myXML = Crack::XML.parse(File.read("20141004Flemington_5start.xml")) 
myJSON = myXML.to_json 
final = JSON.parse(myJSON,:symbolize_names => true) 
pp final 
File.write('test2.json', final) 

:

나는 hayxmlutils for Python에서 여러 도구 xml2json 기본적으로 this post on SO 다음 균열 보석을 시도했습니다. 는 XML이 구문 형식으로 제공 할 때마다이 경우 <Meeting />에 내

<Meeting MeetCode="859382" InputFilename="" GenerationDate="2014-12-05T10:09:53+11:00"> 
    <RequestInfo RequestCode="" RequestId="0"/> 

모든 값을 손실됩니다. JSON으로 변환 할 때 내 값을 유지하려면 어떻게해야합니까?

<json type="object"> 
    <Meeting type="object"> 
    <RequestInfo type="object"> 

최소 XML 예제.

<?xml version="1.0" encoding="iso-8859-1"?> 
<?xml-stylesheet type="text/xsl" href="stylesheet5.xsl"?> 
<Meeting MeetCode="859382" InputFilename="" GenerationDate="2014-12-05T10:09:53+11:00"> 
<RequestInfo RequestCode="" RequestId="0" /> 
    <CodeType>GALLOPS</CodeType> 
    <MeetingCategory>Professional</MeetingCategory> 
    <MeetingStage>Acceptances</MeetingStage> 
    <MeetingStageEncoded>15</MeetingStageEncoded> 
    <MeetingPhase>ResultsConfirmed</MeetingPhase> 
    <PhaseMeetingEncoded>63</PhaseMeetingEncoded> 
    <NominationsClose>2014-09-29T12:00:00+10:00</NominationsClose> 
    <AcceptanceClose>2014-10-01T10:00:00+10:00</AcceptanceClose> 
    <RidersClose>2014-10-01T13:00:00+10:00</RidersClose> 
    <WeightsPublishing>2014-09-30T00:00:00+10:00</WeightsPublishing> 
    <Club ClubCode="10018" Title="Victoria Racing Club" AbrClubDesc="VRC" State="VIC" Category="Metro" /> 
    <Track VenueName="Flemington" VenueDesc="Flemington" VenueAbbr="FLEM" VenueCode="151" TrackName="Main" TrackCode="149"> 
    <TrackRating NumericTrackRating="3">Good</TrackRating> 
    <Penetrometer>4.83</Penetrometer> 
    <RailPosition>+9m Entire Circuit</RailPosition> 
    <RailPositionLastMeeting>True Position Entire Circuit</RailPositionLastMeeting> 
    <Weather>Fine</Weather> 
    <TrackSurface>Turf</TrackSurface> 
    <Comments>Finalised 4/10 - 7:45am Late Scratching Race 3 No. 4</Comments> 
    <Irrigation>Nil last 24hrs, 25mm last 7 days</Irrigation> 
    <Rainfall>Nil last 24hrs, 4.2mm last 7 days</Rainfall> 
    <RacingDirection>AntiClockwise</RacingDirection> 
    <TrackInfo>Penetrometer: Inside 4.85, Outside 4.85</TrackInfo> 
    </Track> 
    <MeetingType>Metro</MeetingType> 
    <ApprenticeMeetingType>Metro</ApprenticeMeetingType> 
    <MeetDate>2014-10-04</MeetDate> 
    <StateDesc>VIC</StateDesc> 
    <NumOfRaces>9</NumOfRaces> 
    <DayNight>Day</DayNight> 
    <TabStatus>true</TabStatus> 
    <Logos /> 
    <XMLSchemaVersion>RISA XML 5.1</XMLSchemaVersion> 
    <XMLSchemaVersion>RISA XML 5.1</XMLSchemaVersion> 
    <Races> 
    <Race RaceCode="5038498" CurrentRaceStage="Results" RaceNumber="1"> 
     <NameRaceFull StakesGroupId="346">Greenland Australia Maribyrnong Trial Stakes</NameRaceFull> 
     <NameRaceForm>MARIBYRNONG TRL</NameRaceForm> 
     <NameRaceNews>Maribyrnong Trial Stakes</NameRaceNews> 
     <Logos> 
     <Logo Id="VOBIS" Reason="Bonus Scheme" Description="Super Vobis Bonus Scheme" Image="VOBIS.png" /> 
     </Logos> 
     <RaceStartTime TimeAtVenue="2014-10-04T12:40:00" AsUtc="2014-10-04T02:40:00" /> 
     <ClosingTimes UtcOffset="10:00:00.000" Nominations="2014-09-29T12:00:00" LateNominations="2014-09-29T15:00:00" WeightsPublishing="2014-09-30T00:00:00" AcceptanceFinal="2014-10-01T10:00:00" Riders="2014-10-01T13:00:00" Scratching="2014-10-04T07:30:00" /> 
     <NominationsRaceNumber>1</NominationsRaceNumber> 
     <NominationsDivisor>0</NominationsDivisor> 
     <GroupType>Listed</GroupType> 
     <RaceType>Flat</RaceType> 
     <EntryConditions> 
     <EntryCondition Type="Class" Id="~" Code="9" Short="" Medium="No class restriction" Long="No class restriction" /> 
     <EntryCondition Type="Weight" Id="SW" Code="50" Short="SW" Medium="Set Weights" Long="Set Weights" /> 
     <EntryCondition Type="Age" Id="2" Code="33" Short="2Y" Medium="2-Y-O" Long="Two-Years-Old" /> 
     <EntryCondition Type="Sex" Id="~" Code="0" Short="" Medium="No sex restriction" Long="No sex restriction" /> 
     <EntryCondition Type="Ballot" Id="BC7" Code="430001" Short="2YO SW" Medium="Early Season 2YO" Long="Selected Early Season 2YO" /> 
     </EntryConditions> 
     <ApprenticeCanClaim>false</ApprenticeCanClaim> 
     <PrizeMoneyDetails TotalExcludingBonuses="120000.00"> 
     <Prizes> 
      <PrizeMoney Position="1" Value="72000.00" /> 
      <PrizeMoney Position="2" Value="21600.00" /> 
      <PrizeMoney Position="3" Value="10800.00" /> 
      <PrizeMoney Position="4" Value="5400.00" /> 
      <PrizeMoney Position="5" Value="3000.00" /> 
      <PrizeMoney Position="6" Value="2400.00" /> 
      <PrizeMoney Position="7" Value="2400.00" /> 
      <PrizeMoney Position="8" Value="2400.00" /> 
     </Prizes> 
     <Bonuses> 
      <BonusDistribution BonusCategoryId="SVG" BonusCategoryCode="6" Scheme="VOBIS" Category="VOBIS - Group/Listed" LongDescription="This race carries a SUPER VOBIS Nominators Bonus of $10,000 for qualified horses." TotalBonus="10000.00" /> 
     </Bonuses> 
     <Trophies> 
      <Trophy Recipient="Owner" Position="1" Value="1000.00" /> 
     </Trophies> 
     <StarterSubsidy>0</StarterSubsidy> 
     </PrizeMoneyDetails> 
     <RaceDistance>1000</RaceDistance> 
     <DistanceApprox>false</DistanceApprox> 
     <TrackStraight>448</TrackStraight> 
     <TrackCircumference>2313</TrackCircumference> 
     <TrackRecords> 
     <TrackRecord TrackCode="149" RecordCode="436169" RaceCode="5029333"> 
      <RaceDate>2013-02-16</RaceDate> 
      <RaceNumber>7</RaceNumber> 
      <DistanceRace>1000</DistanceRace> 
      <Time>00:00:55.420</Time> 
      <TrackRecordHorse HorseCode="790716" HorseName="Black Caviar" /> 
     </TrackRecord> 
     </TrackRecords> 
     <SizeField>16</SizeField> 
     <SizeEmergency>4</SizeEmergency> 
     <Accepters>12</Accepters> 
     <Starters>11</Starters> 
     <WeightChange>0.00</WeightChange> 
     <RaceEntries> 
     <RaceEntry RaceEntryCode="9153413"> 
      <Horse HorseCode="986313" HorseName="Apoloboom" Colour="BAY" Sex="C" Age="2" NamePrev="" HorseStatus="Active" HasStableReturn="true" FoalDate="2012-08-12" /> 
      <!--StableReturnCode = 5139732--> 
      <TabNumber>1</TabNumber> 
      <RaceEntryStatusEncoded>67601</RaceEntryStatusEncoded> 
      <HorseOwnership> 
      <OfficialHorseOwners>Boom Racing 4 (Mgr J L Travaglia)</OfficialHorseOwners> 
      </HorseOwnership> 
      <Trainer TrainerCode="11156"> 
      <Name>Robbie Laing</Name> 
      <Location>Cranbourne</Location> 
      <State>VIC</State> 
      <Postcode>3977</Postcode> 
      <Title>Mr</Title> 
      <PreferredName>Robbie</PreferredName> 
      <Surname>Laing</Surname> 
      <Initials>R E</Initials> 
      </Trainer> 
      <Breeding> 
      <Sire HorseCode="726892" HorseName="Kaphero" /> 
      <Dam HorseCode="752264" HorseName="Apologies" /> 
      <SireOfDam HorseCode="604480" Country="USA" HorseName="Giant's Causeway" /> 
      <Breeder>Burnewang North Pastoral</Breeder> 
      </Breeding> 
      <JockeyRaceEntry JockeyCode="25791" Apprentice="false"> 
      <Name>Vlad Duric</Name> 
      <Location>Pakenham</Location> 
      <State>VIC</State> 
      <Postcode>3810</Postcode> 
      <PreferredName>Vlad</PreferredName> 
      <Surname>Duric</Surname> 
      <Initials>V</Initials> 
      <RidingWeight>53.00</RidingWeight> 
      </JockeyRaceEntry> 
      <RacingColours>Purple, Yellow V, Purple And Yellow Diagonal Striped Sleeves, Yellow And Purple Stars Cap</RacingColours> 
      <BallotSequence>7=</BallotSequence> 
      <BarrierNumber>5</BarrierNumber> 
      <HandicapWeight>57.00</HandicapWeight> 
      <HandicapRating>0.00</HandicapRating> 
      <WeightPenalty>0.0</WeightPenalty> 
      <Gear Blinkers="true" /> 
      <BonusIndicator SchemeName="Super Vobis">N</BonusIndicator> 
      <Logos> 
      <Logo Id="VOBIS" Reason="Bonus Scheme" Description="Super Vobis Bonus Scheme" Image="VOBIS.png" /> 
      </Logos> 
      <Form> 
      <FormSummary /> 
      <ResultsSummaries> 
       <ResultsSummary Name="TotalResults" Starts="1" Wins="0" Seconds="0" Thirds="0" PrizeMoney="0.00" PrizeMoneyExBonus="0.00" Bonus="0.00" /> 
       <ResultsSummary Name="FirstUp" Starts="1" Wins="0" Seconds="0" Thirds="0" PrizeMoney="0.00" /> 
       <ResultsSummary Name="SecondUp" /> 
       <ResultsSummary Name="AtThisDistance" Starts="1" Wins="0" Seconds="0" Thirds="0" PrizeMoney="0.00" /> 
       <ResultsSummary Name="ThisTrack" Starts="1" Wins="0" Seconds="0" Thirds="0" PrizeMoney="0.00" /> 
       <ResultsSummary Name="TrackAndDistance" Starts="1" Wins="0" Seconds="0" Thirds="0" PrizeMoney="0.00" /> 
       <ResultsSummary Name="Firm" /> 
       <ResultsSummary Name="Good" Starts="1" Wins="0" Seconds="0" Thirds="0" PrizeMoney="0.00" /> 
       <ResultsSummary Name="Soft" /> 
       <ResultsSummary Name="Heavy" /> 
       <ResultsSummary Name="Synthetic" /> 
       <ResultsSummary Name="Wet" /> 
       <ResultsSummary Name="NonWet" Starts="1" Wins="0" Seconds="0" Thirds="0" PrizeMoney="0.00" /> 
       <ResultsSummary Name="Night" /> 
       <ResultsSummary Name="JumpsRecord" /> 
       <ResultsSummary Name="ThisSeason" Starts="1" Wins="0" Seconds="0" Thirds="0" PrizeMoney="0.00" /> 
      </ResultsSummaries> 
      <LastStartsSummary>9</LastStartsSummary> 
      <LastStarts> 
       <HorseRaceSummary MtgDate="2014-10-04" VenueName="Flemington" VenueCode="151" AbrVenue="FLEM" RaceNumber="1" RaceCode="5038498"> 
       <NameRaceNews>Maribyrnong Trial Stakes</NameRaceNews> 
       <NameRaceForm>MARIBYRNONG TRL</NameRaceForm> 
       <RaceDistance>1000</RaceDistance> 
       <GroupType>LR</GroupType> 
       <RaceType>Flat</RaceType> 
       <EntryConditions> 
        <EntryCondition Type="Class" Id="~" Code="9" Short="" Medium="No class restriction" Long="No class restriction" /> 
        <EntryCondition Type="Weight" Id="SW" Code="50" Short="SW" Medium="Set Weights" Long="Set Weights" /> 
        <EntryCondition Type="Age" Id="2" Code="33" Short="2Y" Medium="2-Y-O" Long="Two-Years-Old" /> 
        <EntryCondition Type="Sex" Id="~" Code="0" Short="" Medium="No sex restriction" Long="No sex restriction" /> 
       </EntryConditions> 
       <MeetingCategory>Professional</MeetingCategory> 
       <DayNight>Day</DayNight> 
       <ClubCode>10018</ClubCode> 
       <ClubCategory>Metro</ClubCategory> 
       <VenueCategory>Metro</VenueCategory> 
       <RaceStarters>11</RaceStarters> 
       <FinishPosition BeatenMargin="8.80" OfficialMargin="1/2 Neck">9</FinishPosition> 
       <MoneyRaceGrandTotal>121000.00</MoneyRaceGrandTotal> 
       <MoneyPrize>0.00</MoneyPrize> 
       <MoneyBonus>0.00</MoneyBonus> 
       <Jockey JockeyCode="25791" Apprentice="false"> 
        <Name>Vlad Duric</Name> 
        <Location>Pakenham</Location> 
        <State>VIC</State> 
        <Postcode>3810</Postcode> 
        <PreferredName>Vlad</PreferredName> 
        <Surname>Duric</Surname> 
        <Initials>V</Initials> 
       </Jockey> 
       <BarrierNumber>5</BarrierNumber> 
       <Handicap>57.00</Handicap> 
       <StartingWinPrice>$13</StartingWinPrice> 
       <BettingFluctuations PriceOpen="$11" PriceMove1="$13" /> 
       <OtherRunners> 
        <OtherRunner FinishPosition="1" Time="00:00:57.960" HorseCode="985390" HorseName="Mihalic" WinningMargin="8.80" Weight="55.00" WeightCarried="55.00" JockeyCode="22573" JockeyName="M J Zahra" Barrier="7" /> 
        <OtherRunner FinishPosition="2" HorseCode="983001" HorseName="Iceflow" BeatenMargin="0.75" Weight="57.00" WeightCarried="57.00" JockeyCode="793032" JockeyName="D M Lane" Barrier="9" /> 
        <OtherRunner FinishPosition="3" HorseCode="989316" HorseName="Lake Jackson" BeatenMargin="2.25" Weight="57.00" WeightCarried="57.00" JockeyCode="488500" JockeyName="M J Walker" Barrier="8" /> 
       </OtherRunners> 
       <TrackCondition NumericTrackRating="3">Good</TrackCondition> 
       <HandicapRatingPreRace>0.00</HandicapRatingPreRace> 
       <WeightCarried>57.00</WeightCarried> 
       <InRunning Distance="800" Position="5" /> 
       <InRunning Distance="400" Position="8" /> 
       <DistanceSectional>600</DistanceSectional> 
       <TimeSectional>00:00:33.820</TimeSectional> 
       </HorseRaceSummary> 
      </LastStarts> 
      <AtDistance /> 
      </Form> 
      <LastGear GearType="Blinkers ON" GearDate="2014-09-29" /> 
     </RaceEntry> 
     </RaceEntries> 
     <BallotedOutEntries /> 
     <Comments /> 
    </Race> 
    </Races> 
</Meeting> 
+1

XML 예제가 구문 론적으로 정확하지 않으면 사용하기에 적절하지 않습니다. 루트 노드가 필요하고 ''의 닫는 태그가 없습니다. 더 많은 링크를 제공 한 것이 좋지만 문제를 나타내는 최소한의 입력 예제를 포함해야합니다. 우리가 당신을 도울 수 있도록 도와주는 것이 중요합니다. –

+0

감사합니다. 다른 객체 태그 에서처럼 회의 태그가 자동으로 닫히는 xml을 일부 추가 할 것입니다. 나는 xml 유효성 검사를 사용했고 그것이 연결된 파일이 맞다고 말했다. – sayth

답변

1

당신이 lxml파이썬에 설치되어있는 경우, 당신은 여기에 간단 lxml.objectify파이썬 사전의 사용 (날짜/날짜 개체 포함)의 값을 보유 할 수 있도록 사용자 정의 파서를 쓸 수 있습니다 successfuly 당신의 XML 샘플을 변환하고 모든 값을 예약 할 수있는 기능의 요청에 따라 :

from lxml import objectify 
import json 

def xml_to_json(f_xml, f_json, indent=4): 
    def tree_to_dict(tree, tree_dict): 
     _dict = {} 
     if tree.attrib: 
      # store attrib in dictionary 
      _dict.update(tree.attrib) 
     elif tree.text: 
      _dict = tree.text 
     # loop through all the children nodes 
     for node in tree.iterchildren(): 
      node_dict, node_list, _d = {}, [], {} 
      # if nested, do a recursion 
      node_dict = tree_to_dict(node, _d) 
      if not node.tag in _dict: 
       _dict.update(node_dict) 
       continue 
      # use list to append all same name's children node 
      if isinstance(_dict[node.tag], list): 
       _dict[node.tag].append(node_dict[node.tag]) 
       continue 
      node_list.append(_dict[node.tag]) 
      _dict[node.tag] = node_list 
      _dict[node.tag].append(node_dict[node.tag]) 
     if not _dict: 
      _dict = None 
     tree_dict[tree.tag] = _dict 
     return tree_dict 
    # parse your xml file here, getroot() return the root element 
    root = objectify.parse(f_xml).getroot() 
    root_dict = {} 
    # make use of json module and parse the result dictionary to file 
    with open(f_json, 'w') as f: 
     json.dump(tree_to_dict(root, root_dict), f, indent=indent) 

USAG E :

# xml input file path, json output file path, custom indent for json 
xml_to_json('sample.xml', 'sample.json', indent=2) 

결과 :

$ cat sample.json 

{ 
    "Meeting": { 
    "MeetingCategory": "Professional", 
    "Logos": null, 
    "NumOfRaces": "9", 
    "RequestInfo": { 
     "RequestCode": "", 
     "RequestId": "0" 
    }, 
    "WeightsPublishing": "2014-09-30T00:00:00+10:00", 
    "InputFilename": "", 
    "PhaseMeetingEncoded": "63", 
    "MeetingPhase": "ResultsConfirmed", 
    "RidersClose": "2014-10-01T13:00:00+10:00", 
    "NominationsClose": "2014-09-29T12:00:00+10:00", 
    "CodeType": "GALLOPS", 
    "MeetingType": "Metro", 
    "MeetDate": "2014-10-04", 
    "TabStatus": "true", 
    "XMLSchemaVersion": [ 
     "RISA XML 5.1", 
     "RISA XML 5.1" 
    ], 
    "Track": { 
     "Rainfall": "Nil last 24hrs, 4.2mm last 7 days", 
     "Irrigation": "Nil last 24hrs, 25mm last 7 days", 
     "TrackName": "Main", 
     "VenueName": "Flemington", 
     "TrackSurface": "Turf", 
     "TrackCode": "149", 
     "Comments": "Finalised 4/10 - 7:45am Late Scratching Race 3 No. 4", 
     "Weather": "Fine", 
     "Penetrometer": "4.83", 
     "RailPositionLastMeeting": "True Position Entire Circuit", 
     "RailPosition": "+9m Entire Circuit", 
     "VenueAbbr": "FLEM", 
     "TrackInfo": "Penetrometer: Inside 4.85, Outside 4.85", 
     "TrackRating": { 
     "NumericTrackRating": "3" 
     }, 
     "VenueDesc": "Flemington", 
     "RacingDirection": "AntiClockwise", 
     "VenueCode": "151" 
    }, 
    "StateDesc": "VIC", 
    "MeetingStage": "Acceptances", 
    "Club": { 
     "Category": "Metro", 
     "AbrClubDesc": "VRC", 
     "State": "VIC", 
     "ClubCode": "10018", 
     "Title": "Victoria Racing Club" 
    }, 
    "Races": { 
     "Race": { 
     "Logos": { 
      "Logo": { 
      "Image": "VOBIS.png", 
      "Reason": "Bonus Scheme", 
      "Id": "VOBIS", 
      "Description": "Super Vobis Bonus Scheme" 
      } 
     }, 
     "CurrentRaceStage": "Results", 
     "TrackCircumference": "2313", 
     "NameRaceNews": "Maribyrnong Trial Stakes", 
     "Comments": null, 
     "NominationsDivisor": "0", 
     "Starters": "11", 
     "TrackRecords": { 
      "TrackRecord": { 
      "TrackRecordHorse": { 
       "HorseName": "Black Caviar", 
       "HorseCode": "790716" 
      }, 
      "TrackCode": "149", 
      "RaceCode": "5029333", 
      "RecordCode": "436169", 
      "Time": "00:00:55.420", 
      "RaceNumber": "7", 
      "RaceDate": "2013-02-16", 
      "DistanceRace": "1000" 
      } 
     }, 
     "RaceCode": "5038498", 
     "Accepters": "12", 
     "RaceDistance": "1000", 
     "PrizeMoneyDetails": { 
      "StarterSubsidy": "0", 
      "Bonuses": { 
      "BonusDistribution": { 
       "Category": "VOBIS - Group/Listed", 
       "BonusCategoryCode": "6", 
       "LongDescription": "This race carries a SUPER VOBIS Nominators Bonus of $10,000 for qualified horses.", 
       "TotalBonus": "10000.00", 
       "Scheme": "VOBIS", 
       "BonusCategoryId": "SVG" 
      } 
      }, 
      "TotalExcludingBonuses": "120000.00", 
      "Prizes": { 
      "PrizeMoney": [ 
       { 
       "Position": "1", 
       "Value": "72000.00" 
       }, 
       { 
       "Position": "2", 
       "Value": "21600.00" 
       }, 
       { 
       "Position": "3", 
       "Value": "10800.00" 
       }, 
       { 
       "Position": "4", 
       "Value": "5400.00" 
       }, 
       { 
       "Position": "5", 
       "Value": "3000.00" 
       }, 
       { 
       "Position": "6", 
       "Value": "2400.00" 
       }, 
       { 
       "Position": "7", 
       "Value": "2400.00" 
       }, 
       { 
       "Position": "8", 
       "Value": "2400.00" 
       } 
      ] 
      }, 
      "Trophies": { 
      "Trophy": { 
       "Position": "1", 
       "Recipient": "Owner", 
       "Value": "1000.00" 
      } 
      } 
     }, 
     "NominationsRaceNumber": "1", 
     "ApprenticeCanClaim": "false", 
     "GroupType": "Listed", 
     "NameRaceFull": { 
      "StakesGroupId": "346" 
     }, 
     "SizeField": "16", 
     "NameRaceForm": "MARIBYRNONG TRL", 
     "RaceType": "Flat", 
     "RaceEntries": { 
      "RaceEntry": { 
      "comment": null, 
      "Trainer": { 
       "State": "VIC", 
       "PreferredName": "Robbie", 
       "Surname": "Laing", 
       "Location": "Cranbourne", 
       "Initials": "R E", 
       "TrainerCode": "11156", 
       "Name": "Robbie Laing", 
       "Title": "Mr", 
       "Postcode": "3977" 
      }, 
      "Horse": { 
       "HorseCode": "986313", 
       "Age": "2", 
       "FoalDate": "2012-08-12", 
       "HorseStatus": "Active", 
       "Sex": "C", 
       "NamePrev": "", 
       "HorseName": "Apoloboom", 
       "HasStableReturn": "true", 
       "Colour": "BAY" 
      }, 
      "BarrierNumber": "5", 
      "Gear": { 
       "Blinkers": "true" 
      }, 
      "Form": { 
       "LastStartsSummary": "9", 
       "AtDistance": null, 
       "FormSummary": null, 
       "ResultsSummaries": { 
       "ResultsSummary": [ 
        { 
        "Bonus": "0.00", 
        "Name": "TotalResults", 
        "PrizeMoney": "0.00", 
        "Seconds": "0", 
        "Starts": "1", 
        "PrizeMoneyExBonus": "0.00", 
        "Wins": "0", 
        "Thirds": "0" 
        }, 
        { 
        "Name": "FirstUp", 
        "PrizeMoney": "0.00", 
        "Seconds": "0", 
        "Starts": "1", 
        "Wins": "0", 
        "Thirds": "0" 
        }, 
        { 
        "Name": "SecondUp" 
        }, 
        { 
        "Name": "AtThisDistance", 
        "PrizeMoney": "0.00", 
        "Seconds": "0", 
        "Starts": "1", 
        "Wins": "0", 
        "Thirds": "0" 
        }, 
        { 
        "Name": "ThisTrack", 
        "PrizeMoney": "0.00", 
        "Seconds": "0", 
        "Starts": "1", 
        "Wins": "0", 
        "Thirds": "0" 
        }, 
        { 
        "Name": "TrackAndDistance", 
        "PrizeMoney": "0.00", 
        "Seconds": "0", 
        "Starts": "1", 
        "Wins": "0", 
        "Thirds": "0" 
        }, 
        { 
        "Name": "Firm" 
        }, 
        { 
        "Name": "Good", 
        "PrizeMoney": "0.00", 
        "Seconds": "0", 
        "Starts": "1", 
        "Wins": "0", 
        "Thirds": "0" 
        }, 
        { 
        "Name": "Soft" 
        }, 
        { 
        "Name": "Heavy" 
        }, 
        { 
        "Name": "Synthetic" 
        }, 
        { 
        "Name": "Wet" 
        }, 
        { 
        "Name": "NonWet", 
        "PrizeMoney": "0.00", 
        "Seconds": "0", 
        "Starts": "1", 
        "Wins": "0", 
        "Thirds": "0" 
        }, 
        { 
        "Name": "Night" 
        }, 
        { 
        "Name": "JumpsRecord" 
        }, 
        { 
        "Name": "ThisSeason", 
        "PrizeMoney": "0.00", 
        "Seconds": "0", 
        "Starts": "1", 
        "Wins": "0", 
        "Thirds": "0" 
        } 
       ] 
       }, 
       "LastStarts": { 
       "HorseRaceSummary": { 
        "MeetingCategory": "Professional", 
        "AbrVenue": "FLEM", 
        "MoneyBonus": "0.00", 
        "VenueName": "Flemington", 
        "MoneyRaceGrandTotal": "121000.00", 
        "StartingWinPrice": "$13", 
        "Jockey": { 
        "JockeyCode": "25791", 
        "State": "VIC", 
        "PreferredName": "Vlad", 
        "Surname": "Duric", 
        "Location": "Pakenham", 
        "Postcode": "3810", 
        "Initials": "V", 
        "Apprentice": "false", 
        "Name": "Vlad Duric" 
        }, 
        "RaceCode": "5038498", 
        "ClubCategory": "Metro", 
        "RaceDistance": "1000", 
        "RaceStarters": "11", 
        "EntryConditions": { 
        "EntryCondition": [ 
         { 
         "Medium": "No class restriction", 
         "Short": "", 
         "Long": "No class restriction", 
         "Code": "9", 
         "Type": "Class", 
         "Id": "~" 
         }, 
         { 
         "Medium": "Set Weights", 
         "Short": "SW", 
         "Long": "Set Weights", 
         "Code": "50", 
         "Type": "Weight", 
         "Id": "SW" 
         }, 
         { 
         "Medium": "2-Y-O", 
         "Short": "2Y", 
         "Long": "Two-Years-Old", 
         "Code": "33", 
         "Type": "Age", 
         "Id": "2" 
         }, 
         { 
         "Medium": "No sex restriction", 
         "Short": "", 
         "Long": "No sex restriction", 
         "Code": "0", 
         "Type": "Sex", 
         "Id": "~" 
         } 
        ] 
        }, 
        "VenueCode": "151", 
        "GroupType": "LR", 
        "InRunning": [ 
        { 
         "Distance": "800", 
         "Position": "5" 
        }, 
        { 
         "Distance": "400", 
         "Position": "8" 
        } 
        ], 
        "OtherRunners": { 
        "OtherRunner": [ 
         { 
         "JockeyCode": "22573", 
         "HorseCode": "985390", 
         "Weight": "55.00", 
         "Barrier": "7", 
         "JockeyName": "M J Zahra", 
         "WeightCarried": "55.00", 
         "Time": "00:00:57.960", 
         "FinishPosition": "1", 
         "HorseName": "Mihalic", 
         "WinningMargin": "8.80" 
         }, 
         { 
         "JockeyCode": "793032", 
         "HorseCode": "983001", 
         "Weight": "57.00", 
         "BeatenMargin": "0.75", 
         "JockeyName": "D M Lane", 
         "WeightCarried": "57.00", 
         "Barrier": "9", 
         "FinishPosition": "2", 
         "HorseName": "Iceflow" 
         }, 
         { 
         "JockeyCode": "488500", 
         "HorseCode": "989316", 
         "Weight": "57.00", 
         "BeatenMargin": "2.25", 
         "JockeyName": "M J Walker", 
         "WeightCarried": "57.00", 
         "Barrier": "8", 
         "FinishPosition": "3", 
         "HorseName": "Lake Jackson" 
         } 
        ] 
        }, 
        "NameRaceForm": "MARIBYRNONG TRL", 
        "RaceType": "Flat", 
        "Handicap": "57.00", 
        "HandicapRatingPreRace": "0.00", 
        "TimeSectional": "00:00:33.820", 
        "BarrierNumber": "5", 
        "MtgDate": "2014-10-04", 
        "TrackCondition": { 
        "NumericTrackRating": "3" 
        }, 
        "BettingFluctuations": { 
        "PriceOpen": "$11", 
        "PriceMove1": "$13" 
        }, 
        "DistanceSectional": "600", 
        "ClubCode": "10018", 
        "RaceNumber": "1", 
        "MoneyPrize": "0.00", 
        "NameRaceNews": "Maribyrnong Trial Stakes", 
        "VenueCategory": "Metro", 
        "FinishPosition": { 
        "OfficialMargin": "1/2 Neck", 
        "BeatenMargin": "8.80" 
        }, 
        "DayNight": "Day", 
        "WeightCarried": "57.00" 
       } 
       } 
      }, 
      "Logos": { 
       "Logo": { 
       "Image": "VOBIS.png", 
       "Reason": "Bonus Scheme", 
       "Id": "VOBIS", 
       "Description": "Super Vobis Bonus Scheme" 
       } 
      }, 
      "HandicapRating": "0.00", 
      "BallotSequence": "7=", 
      "TabNumber": "1", 
      "HandicapWeight": "57.00", 
      "JockeyRaceEntry": { 
       "JockeyCode": "25791", 
       "State": "VIC", 
       "PreferredName": "Vlad", 
       "Surname": "Duric", 
       "Location": "Pakenham", 
       "Postcode": "3810", 
       "Initials": "V", 
       "Apprentice": "false", 
       "RidingWeight": "53.00", 
       "Name": "Vlad Duric" 
      }, 
      "BonusIndicator": { 
       "SchemeName": "Super Vobis" 
      }, 
      "RaceEntryCode": "9153413", 
      "HorseOwnership": { 
       "OfficialHorseOwners": "Boom Racing 4 (Mgr J L Travaglia)" 
      }, 
      "RaceEntryStatusEncoded": "67601", 
      "LastGear": { 
       "GearType": "Blinkers ON", 
       "GearDate": "2014-09-29" 
      }, 
      "Breeding": { 
       "Breeder": "Burnewang North Pastoral", 
       "Dam": { 
       "HorseName": "Apologies", 
       "HorseCode": "752264" 
       }, 
       "SireOfDam": { 
       "Country": "USA", 
       "HorseName": "Giant's Causeway", 
       "HorseCode": "604480" 
       }, 
       "Sire": { 
       "HorseName": "Kaphero", 
       "HorseCode": "726892" 
       } 
      }, 
      "RacingColours": "Purple, Yellow V, Purple And Yellow Diagonal Striped Sleeves, Yellow And Purple Stars Cap", 
      "WeightPenalty": "0.0" 
      } 
     }, 
     "RaceStartTime": { 
      "TimeAtVenue": "2014-10-04T12:40:00", 
      "AsUtc": "2014-10-04T02:40:00" 
     }, 
     "EntryConditions": { 
      "EntryCondition": [ 
      { 
       "Medium": "No class restriction", 
       "Short": "", 
       "Long": "No class restriction", 
       "Code": "9", 
       "Type": "Class", 
       "Id": "~" 
      }, 
      { 
       "Medium": "Set Weights", 
       "Short": "SW", 
       "Long": "Set Weights", 
       "Code": "50", 
       "Type": "Weight", 
       "Id": "SW" 
      }, 
      { 
       "Medium": "2-Y-O", 
       "Short": "2Y", 
       "Long": "Two-Years-Old", 
       "Code": "33", 
       "Type": "Age", 
       "Id": "2" 
      }, 
      { 
       "Medium": "No sex restriction", 
       "Short": "", 
       "Long": "No sex restriction", 
       "Code": "0", 
       "Type": "Sex", 
       "Id": "~" 
      }, 
      { 
       "Medium": "Early Season 2YO", 
       "Short": "2YO SW", 
       "Long": "Selected Early Season 2YO", 
       "Code": "430001", 
       "Type": "Ballot", 
       "Id": "BC7" 
      } 
      ] 
     }, 
     "SizeEmergency": "4", 
     "TrackStraight": "448", 
     "DistanceApprox": "false", 
     "ClosingTimes": { 
      "LateNominations": "2014-09-29T15:00:00", 
      "WeightsPublishing": "2014-09-30T00:00:00", 
      "UtcOffset": "10:00:00.000", 
      "Scratching": "2014-10-04T07:30:00", 
      "Nominations": "2014-09-29T12:00:00", 
      "AcceptanceFinal": "2014-10-01T10:00:00", 
      "Riders": "2014-10-01T13:00:00" 
     }, 
     "RaceNumber": "1", 
     "WeightChange": "0.00", 
     "BallotedOutEntries": null 
     } 
    }, 
    "MeetingStageEncoded": "15", 
    "ApprenticeMeetingType": "Metro", 
    "MeetCode": "859382", 
    "DayNight": "Day", 
    "AcceptanceClose": "2014-10-01T10:00:00+10:00", 
    "GenerationDate": "2014-12-05T10:09:53+11:00" 
    } 
} 

출력은 약간 길 수도 있지만, 출력의 하단에 보면, 모든 값은 반전됩니다

...  
"MeetingStageEncoded": "15", 
"ApprenticeMeetingType": "Metro", 
"MeetCode": "859382", 
"DayNight": "Day", 
"AcceptanceClose": "2014-10-01T10:00:00+10:00", 
"GenerationDate": "2014-12-05T10:09:53+11:00" 
... 

나는 이것이 당신이 찾고있는 것이기를 바랍니다.

+0

참으로 그렇다. 나는 대부분의 예제에서 배울 좋은 모범을 찾기 위해 고심하고 있었고, 매우 기본적인 것들이며 조금 복잡합니다. – sayth

+1

@sayth, 네 과거에도 같은 느낌이었습니다. 수개월의 경험과 시행 착오와 많은 책을 읽은 후에 만, 이제는 커스텀 xml/html 파서를 수행하는 방법을 이해하고 기존 도구를 활용하여 훨씬 쉬운 방법으로 작업을 수행 할 수 있습니다. 이것도 너에게있어! 모든 최선 :) – Anzel

1

그것은 다음과 같습니다

myXML = Crack::XML.parse(File.read("20141004Flemington_5start.xml")) 
myJSON = myXML.to_json 
final = JSON.parse(myJSON,:symbolize_names => true) 
pp final 
File.write('test2.json', final) 

은 다음과 같아야합니다

myXML = Crack::XML.parse(File.read("20141004Flemington_5start.xml")) 
File.write('test2.json', myXML.to_json) 

당신은 JSON 출력을합니다.

+0

그래, 내 스크립트에서 json 객체를 직렬화했다. – sayth