Siva Swarna Siva Swarna - 5 months ago 8
JSON Question

Convert XML to custamized JSON using XSLT

I have a problem converting XML to JSON using XSLT and I have a problem converting it.

This is the XML input i am providing :

<ArrayOfApiInvoiceReport>
<ApiInvoiceReport>
<BillingAddress1>717 N. ATLANTIC AVE</BillingAddress1>
<BillingCity>DAYTONA BEACH</BillingCity>
<BillingCountry>US</BillingCountry>
<BillingCustomerCode>3001518</BillingCustomerCode>
<BillingCustomerName>MAUI NIX - DAYTONA BEACH</BillingCustomerName>
<BillingState>FL</BillingState>
<BillingTelephone>32118</BillingTelephone>
<DivisionCode>09</DivisionCode>
<FreightAmount>86.52</FreightAmount>
<InvoiceAmount>1041.96</InvoiceAmount>
<InvoiceCreatedDate>2016-06-18</InvoiceCreatedDate>
<InvoiceItems>
<ColorCode>BLK</ColorCode>
<GenderCode>M</GenderCode>
<InvoiceItemSizes>
<InvoiceLineNumber>1000</InvoiceLineNumber>
<InvoiceNumber>1011063022016</InvoiceNumber>
<InvoicedQuantity>12</InvoicedQuantity>
<SizeCode>1SZ</SizeCode>
<SizeInvoicedPrice>24.52</SizeInvoicedPrice>
<UPC>BBPKC1</UPC>
</InvoiceItemSizes>
<InvoiceLineNumber>1000</InvoiceLineNumber>
<InvoiceNumber>1011063022016</InvoiceNumber>
<InvoicedQuantity>12</InvoicedQuantity>
<ProductInvoicedPrice>294.24</ProductInvoicedPrice>
<ProductName>OVERTIME RIPSTOP HTR</ProductName>
<ProductNumber>BBPKC1BLK1SZ</ProductNumber>
<SeasonCode>USF16</SeasonCode>
</InvoiceItems>
<InvoiceItems>
<ColorCode>BLU</ColorCode>
<GenderCode>M</GenderCode>
<InvoiceItemSizes>
<InvoiceLineNumber>2000</InvoiceLineNumber>
<InvoiceNumber>1011063022016</InvoiceNumber>
<InvoicedQuantity>12</InvoicedQuantity>
<SizeCode>1SZ</SizeCode>
<SizeInvoicedPrice>20.02</SizeInvoicedPrice>
<UPC>BBPKL2</UPC>
</InvoiceItemSizes>
<InvoiceLineNumber>2000</InvoiceLineNumber>
<InvoiceNumber>1011063022016</InvoiceNumber>
<InvoicedQuantity>12</InvoicedQuantity>
<ProductInvoicedPrice>240.24</ProductInvoicedPrice>
<ProductName>CORE MEDINA</ProductName>
<ProductNumber>BBPKL2BLU1SZ</ProductNumber>
<SeasonCode>USF16</SeasonCode>
</InvoiceItems>
<InvoiceItems>
<ColorCode>BRN</ColorCode>
<GenderCode>M</GenderCode>
<InvoiceItemSizes>
<InvoiceLineNumber>3000</InvoiceLineNumber>
<InvoiceNumber>1011063022016</InvoiceNumber>
<InvoicedQuantity>24</InvoicedQuantity>
<SizeCode>1SZ</SizeCode>
<SizeInvoicedPrice>8.77</SizeInvoicedPrice>
<UPC>BWUFX3</UPC>
</InvoiceItemSizes>
<InvoiceLineNumber>3000</InvoiceLineNumber>
<InvoiceNumber>1011063022016</InvoiceNumber>
<InvoicedQuantity>24</InvoicedQuantity>
<ProductInvoicedPrice>210.48</ProductInvoicedPrice>
<ProductName>RIPPER BLOCK ALL DAY ZF</ProductName>
<ProductNumber>BWUFX3BRN1SZ</ProductNumber>
<SeasonCode>USF16</SeasonCode>
</InvoiceItems>
<InvoiceItems>
<ColorCode>BLK</ColorCode>
<GenderCode>M</GenderCode>
<InvoiceItemSizes>
<InvoiceLineNumber>4000</InvoiceLineNumber>
<InvoiceNumber>1011063022016</InvoiceNumber>
<InvoicedQuantity>24</InvoicedQuantity>
<SizeCode>1SZ</SizeCode>
<SizeInvoicedPrice>8.77</SizeInvoicedPrice>
<UPC>BWUFX3</UPC>
</InvoiceItemSizes>
<InvoiceLineNumber>4000</InvoiceLineNumber>
<InvoiceNumber>1011063022016</InvoiceNumber>
<InvoicedQuantity>24</InvoicedQuantity>
<ProductInvoicedPrice>210.48</ProductInvoicedPrice>
<ProductName>RIPPER BLOCK ALL DAY ZF</ProductName>
<ProductNumber>BWUFX3BLK1SZ</ProductNumber>
<SeasonCode>USF16</SeasonCode>
</InvoiceItems>
<InvoiceNumber>1011063022016</InvoiceNumber>
<InvoiceSentDate>2016-06-18</InvoiceSentDate>
<InvoiceStatus>95</InvoiceStatus>
<InvoiceTotalQuantity>72.000000</InvoiceTotalQuantity>
<OrderNumber>0011353030</OrderNumber>
<PurchaseOrder>099THRCBAG160615</PurchaseOrder>
<SalesPersonCode>3310</SalesPersonCode>
<SeasonCode>USF16</SeasonCode>
<ShippingAddress1>717 N. ATLANTIC AVE</ShippingAddress1>
<ShippingCity>DAYTONA BEACH</ShippingCity>
<ShippingCountry>US</ShippingCountry>
<ShippingCustomerCode>3001518</ShippingCustomerCode>
<ShippingCustomerName>MAUI NIX - DAYTONA BEACH</ShippingCustomerName>
<ShippingMethodCode>006</ShippingMethodCode>
<ShippingState>FL</ShippingState>
<ShippingTelephone>32118</ShippingTelephone>
<TermsCode>DDP</TermsCode>
<TrackingNumber>0</TrackingNumber>
</ApiInvoiceReport>




This is the XSLT, I am using to convert the

<?xml version="1.0" encoding="UTF-8"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output encoding="utf-8" method="text" omit-xml-declaration="yes"/>
<xsl:variable name="nl">
<xsl:text/>
</xsl:variable>
<xsl:variable name="tb">
<xsl:text/>
</xsl:variable>
<xsl:template match="/*">
<xsl:text>[{</xsl:text>
<xsl:value-of select="$nl"/>
<!-- Process all the child nodes of the root -->
<xsl:apply-templates mode="detect" select="*">
<xsl:with-param name="indent" select="$tb"/>
</xsl:apply-templates>
<!-- Close the root array -->
<xsl:value-of select="$nl"/>
<xsl:text/>
</xsl:template>
<xsl:template match="*" mode="detect">
<xsl:choose>
<xsl:when test="name(preceding-sibling::*[1]) = name(current()) and name(following-sibling::*[1]) != name(current())">
<xsl:apply-templates mode="obj-content" select="."/>
<xsl:text>]</xsl:text>
<xsl:if test="count(following-sibling::*[name() != name(current())]) > 0">, </xsl:if>
</xsl:when>
<xsl:when test="name(preceding-sibling::*[1]) = name(current())">
<xsl:apply-templates mode="obj-content" select="."/>
<xsl:if test="name(following-sibling::*) = name(current())">, </xsl:if>
</xsl:when>
<xsl:when test="following-sibling::*[1][name() = name(current())]">
<xsl:choose>
<xsl:when test="local-name(current()) = 'ApiInvoiceReport'">
<xsl:apply-templates mode="detect" select="*"/>
<xsl:text>}, </xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>"</xsl:text>
<xsl:value-of select="name()"/>
<xsl:text>" : [</xsl:text>
<xsl:apply-templates mode="obj-content" select="."/>
<xsl:text>, </xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:when test="count(./child::*) > 0 or count(@*) > 0">
<xsl:text>"</xsl:text>
<xsl:value-of select="name()"/>" : [<xsl:apply-templates
mode="obj-content" select="."/>
<xsl:if test="count(following-sibling::*) > 0">], </xsl:if>
</xsl:when>
<xsl:when test="count(./child::*) = 0">
<xsl:text>"</xsl:text>
<xsl:value-of select="name()"/>" : "<xsl:apply-templates select="."/>
<xsl:text>"</xsl:text>
<xsl:if test="count(following-sibling::*) > 0">, </xsl:if>
</xsl:when>
</xsl:choose>
</xsl:template>
<xsl:template match="*" mode="obj-content">
<xsl:text>{</xsl:text>
<xsl:apply-templates mode="attr" select="@*"/>
<xsl:if test="count(@*) > 0 and (count(child::*) > 0 or text())">, </xsl:if>
<xsl:apply-templates mode="detect" select="./*"/>
<xsl:if test="count(child::*) = 0 and text() and not(@*)">
<xsl:text>"</xsl:text>
<xsl:value-of select="name()"/>" : "<xsl:value-of select="text()"/>
<xsl:text>"</xsl:text>
</xsl:if>
<xsl:if test="count(child::*) = 0 and text() and @*">
<xsl:text>: "</xsl:text>
<xsl:value-of select="text()"/>
<xsl:text>"</xsl:text>
</xsl:if>
<xsl:text>}</xsl:text>
<xsl:if test="position() &lt; last()">, </xsl:if>
</xsl:template>
<xsl:template match="@*" mode="attr">
<xsl:text>"</xsl:text>
<xsl:value-of select="name()"/>" : "<xsl:value-of select="."/>
<xsl:text>"</xsl:text>
<xsl:if test="position() &lt; last()">,</xsl:if>
</xsl:template>
<xsl:template match="node/@TEXT | text()" name="removeBreaks">
<xsl:param name="pText" select="normalize-space(.)"/>
<xsl:choose>
<xsl:when test="not(contains($pText, '&#xa;'))">
<xsl:copy-of select="$pText"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="concat(substring-before($pText, '&#xd;&#xa;'), ' ')"/>
<xsl:call-template name="removeBreaks">
<xsl:with-param name="pText" select="substring-after($pText, '&#xd;&#xa;')"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:template>




I am getting the output as follows :

[{"ApiInvoiceReport" : [{"BillingAddress1" : "717 N. ATLANTIC AVE", "BillingCity" : "DAYTONA BEACH", "BillingCountry" : "US", "BillingCustomerCode" : "3001518", "BillingCustomerName" : "MAUI NIX - DAYTONA BEACH", "BillingState" : "FL", "BillingTelephone" : "32118", "DivisionCode" : "09", "FreightAmount" : "86.52", "InvoiceAmount" : "1041.96", "InvoiceCreatedDate" : "2016-06-18", "InvoiceItems" : [{"ColorCode" : "BLK", "GenderCode" : "M", "InvoiceItemSizes" : [{"InvoiceLineNumber" : "1000", "InvoiceNumber" : "1011063022016", "InvoicedQuantity" : "12", "SizeCode" : "1SZ", "SizeInvoicedPrice" : "24.52", "UPC" : "BBPKC1"}], "InvoiceLineNumber" : "1000", "InvoiceNumber" : "1011063022016", "InvoicedQuantity" : "12", "ProductInvoicedPrice" : "294.24", "ProductName" : "OVERTIME RIPSTOP HTR", "ProductNumber" : "BBPKC1BLK1SZ", "SeasonCode" : "USF16"}, {"ColorCode" : "BLU", "GenderCode" : "M", "InvoiceItemSizes" : [{"InvoiceLineNumber" : "2000", "InvoiceNumber" : "1011063022016", "InvoicedQuantity" : "12", "SizeCode" : "1SZ", "SizeInvoicedPrice" : "20.02", "UPC" : "BBPKL2"}], "InvoiceLineNumber" : "2000", "InvoiceNumber" : "1011063022016", "InvoicedQuantity" : "12", "ProductInvoicedPrice" : "240.24", "ProductName" : "CORE MEDINA", "ProductNumber" : "BBPKL2BLU1SZ", "SeasonCode" : "USF16"}, {"ColorCode" : "BRN", "GenderCode" : "M", "InvoiceItemSizes" : [{"InvoiceLineNumber" : "3000", "InvoiceNumber" : "1011063022016", "InvoicedQuantity" : "24", "SizeCode" : "1SZ", "SizeInvoicedPrice" : "8.77", "UPC" : "BWUFX3"}], "InvoiceLineNumber" : "3000", "InvoiceNumber" : "1011063022016", "InvoicedQuantity" : "24", "ProductInvoicedPrice" : "210.48", "ProductName" : "RIPPER BLOCK ALL DAY ZF", "ProductNumber" : "BWUFX3BRN1SZ", "SeasonCode" : "USF16"}, {"ColorCode" : "BLK", "GenderCode" : "M", "InvoiceItemSizes" : [{"InvoiceLineNumber" : "4000", "InvoiceNumber" : "1011063022016", "InvoicedQuantity" : "24", "SizeCode" : "1SZ", "SizeInvoicedPrice" : "8.77", "UPC" : "BWUFX3"}], "InvoiceLineNumber" : "4000", "InvoiceNumber" : "1011063022016", "InvoicedQuantity" : "24", "ProductInvoicedPrice" : "210.48", "ProductName" : "RIPPER BLOCK ALL DAY ZF", "ProductNumber" : "BWUFX3BLK1SZ", "SeasonCode" : "USF16"}], "InvoiceNumber" : "1011063022016", "InvoiceSentDate" : "2016-06-18", "InvoiceStatus" : "95", "InvoiceTotalQuantity" : "72.000000", "OrderNumber" : "0011353030", "PurchaseOrder" : "099THRCBAG160615", "SalesPersonCode" : "3310", "SeasonCode" : "USF16", "ShippingAddress1" : "717 N. ATLANTIC AVE", "ShippingCity" : "DAYTONA BEACH", "ShippingCountry" : "US", "ShippingCustomerCode" : "3001518", "ShippingCustomerName" : "MAUI NIX - DAYTONA BEACH", "ShippingMethodCode" : "006", "ShippingState" : "FL", "ShippingTelephone" : "32118", "TermsCode" : "DDP", "TrackingNumber" : "0"}


I want to see the output as follows :

[{"BillingAddress1" : "717 N. ATLANTIC AVE", "BillingCity" : "DAYTONA BEACH", "BillingCountry" : "US", "BillingCustomerCode" : "3001518", "BillingCustomerName" : "MAUI NIX - DAYTONA BEACH", "BillingState" : "FL", "BillingTelephone" : "32118", "DivisionCode" : "09", "FreightAmount" : "86.52", "InvoiceAmount" : "1041.96", "InvoiceCreatedDate" : "2016-06-18", "InvoiceItems" : [{"ColorCode" : "BLK", "GenderCode" : "M", "InvoiceItemSizes" : [{"InvoiceLineNumber" : "1000", "InvoiceNumber" : "1011063022016", "InvoicedQuantity" : "12", "SizeCode" : "1SZ", "SizeInvoicedPrice" : "24.52", "UPC" : "BBPKC1"}], "InvoiceLineNumber" : "1000", "InvoiceNumber" : "1011063022016", "InvoicedQuantity" : "12", "ProductInvoicedPrice" : "294.24", "ProductName" : "OVERTIME RIPSTOP HTR", "ProductNumber" : "BBPKC1BLK1SZ", "SeasonCode" : "USF16"}, {"ColorCode" : "BLU", "GenderCode" : "M", "InvoiceItemSizes" : [{"InvoiceLineNumber" : "2000", "InvoiceNumber" : "1011063022016", "InvoicedQuantity" : "12", "SizeCode" : "1SZ", "SizeInvoicedPrice" : "20.02", "UPC" : "BBPKL2"}], "InvoiceLineNumber" : "2000", "InvoiceNumber" : "1011063022016", "InvoicedQuantity" : "12", "ProductInvoicedPrice" : "240.24", "ProductName" : "CORE MEDINA", "ProductNumber" : "BBPKL2BLU1SZ", "SeasonCode" : "USF16"}, {"ColorCode" : "BRN", "GenderCode" : "M", "InvoiceItemSizes" : [{"InvoiceLineNumber" : "3000", "InvoiceNumber" : "1011063022016", "InvoicedQuantity" : "24", "SizeCode" : "1SZ", "SizeInvoicedPrice" : "8.77", "UPC" : "BWUFX3"}], "InvoiceLineNumber" : "3000", "InvoiceNumber" : "1011063022016", "InvoicedQuantity" : "24", "ProductInvoicedPrice" : "210.48", "ProductName" : "RIPPER BLOCK ALL DAY ZF", "ProductNumber" : "BWUFX3BRN1SZ", "SeasonCode" : "USF16"}, {"ColorCode" : "BLK", "GenderCode" : "M", "InvoiceItemSizes" : [{"InvoiceLineNumber" : "4000", "InvoiceNumber" : "1011063022016", "InvoicedQuantity" : "24", "SizeCode" : "1SZ", "SizeInvoicedPrice" : "8.77", "UPC" : "BWUFX3"}], "InvoiceLineNumber" : "4000", "InvoiceNumber" : "1011063022016", "InvoicedQuantity" : "24", "ProductInvoicedPrice" : "210.48", "ProductName" : "RIPPER BLOCK ALL DAY ZF", "ProductNumber" : "BWUFX3BLK1SZ", "SeasonCode" : "USF16"}], "InvoiceNumber" : "1011063022016", "InvoiceSentDate" : "2016-06-18", "InvoiceStatus" : "95", "InvoiceTotalQuantity" : "72.000000", "OrderNumber" : "0011353030", "PurchaseOrder" : "099THRCBAG160615", "SalesPersonCode" : "3310", "SeasonCode" : "USF16", "ShippingAddress1" : "717 N. ATLANTIC AVE", "ShippingCity" : "DAYTONA BEACH", "ShippingCountry" : "US", "ShippingCustomerCode" : "3001518", "ShippingCustomerName" : "MAUI NIX - DAYTONA BEACH", "ShippingMethodCode" : "006", "ShippingState" : "FL", "ShippingTelephone" : "32118", "TermsCode" : "DDP", "TrackingNumber" : "0"}]


I don't want to see the ApiInvoiceReport at the starting of the JSON file and the josn should end with ] at the end.

I have very less knowledge in the XSLT and I have tried my best but I couldn't get the expected output.

Thanks in Advance!

Answer

Here is quick answer:

For the below XSLT:

<?xml version="1.0" encoding="UTF-8"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output encoding="utf-8" method="text" omit-xml-declaration="yes"/>
<xsl:variable name="nl">
    <xsl:text/>
</xsl:variable>
<xsl:variable name="tb">
    <xsl:text/>
</xsl:variable>
<xsl:template match="/*/*">
    <xsl:text>[{</xsl:text>
    <xsl:value-of select="$nl"/>
    <!-- Process all the child nodes of the root -->
    <xsl:apply-templates mode="detect" select="*">
        <xsl:with-param name="indent" select="$tb"/>
    </xsl:apply-templates>
    <!-- Close the root array -->
    <xsl:value-of select="$nl"/>
    <xsl:text/>}]
</xsl:template>
<xsl:template match="*" mode="detect">
    <xsl:choose>
        <xsl:when test="name(preceding-sibling::*[1]) = name(current()) and name(following-sibling::*[1]) != name(current())">
            <xsl:apply-templates mode="obj-content" select="."/>
            <xsl:text>]</xsl:text>
            <xsl:if test="count(following-sibling::*[name() != name(current())]) > 0">, </xsl:if>
        </xsl:when>
        <xsl:when test="name(preceding-sibling::*[1]) = name(current())">
            <xsl:apply-templates mode="obj-content" select="."/>
            <xsl:if test="name(following-sibling::*) = name(current())">, </xsl:if>
        </xsl:when>
        <xsl:when test="following-sibling::*[1][name() = name(current())]">
            <xsl:choose>
                <xsl:when test="local-name(current()) = 'ApiInvoiceReport'">
                    <xsl:apply-templates mode="detect" select="*"/>
                    <xsl:text>}, </xsl:text>
                </xsl:when>
                <xsl:otherwise>
                    <xsl:text>"</xsl:text>
                    <xsl:value-of select="name()"/>
                    <xsl:text>" : [</xsl:text>
                    <xsl:apply-templates mode="obj-content" select="."/>
                    <xsl:text>, </xsl:text>
                </xsl:otherwise>
            </xsl:choose>
        </xsl:when>
        <xsl:when test="count(./child::*) > 0 or count(@*) > 0">
            <xsl:text>"</xsl:text>
            <xsl:value-of select="name()"/>" : [<xsl:apply-templates
                mode="obj-content" select="."/>
            <xsl:if test="count(following-sibling::*) > 0">], </xsl:if>
        </xsl:when>
        <xsl:when test="count(./child::*) = 0">
            <xsl:text>"</xsl:text>
            <xsl:value-of select="name()"/>" : "<xsl:apply-templates select="."/>
            <xsl:text>"</xsl:text>
            <xsl:if test="count(following-sibling::*) > 0">, </xsl:if>
        </xsl:when>
    </xsl:choose>
</xsl:template>
<xsl:template match="*" mode="obj-content">
    <xsl:text>{</xsl:text>
    <xsl:apply-templates mode="attr" select="@*"/>
    <xsl:if test="count(@*) > 0 and (count(child::*) > 0 or text())">, </xsl:if>
    <xsl:apply-templates mode="detect" select="./*"/>
    <xsl:if test="count(child::*) = 0 and text() and not(@*)">
        <xsl:text>"</xsl:text>
        <xsl:value-of select="name()"/>" : "<xsl:value-of select="text()"/>
        <xsl:text>"</xsl:text>
    </xsl:if>
    <xsl:if test="count(child::*) = 0 and text() and @*">
        <xsl:text>: "</xsl:text>
        <xsl:value-of select="text()"/>
        <xsl:text>"</xsl:text>
    </xsl:if>
    <xsl:text>}</xsl:text>
    <xsl:if test="position() &lt; last()">, </xsl:if>
</xsl:template>
<xsl:template match="@*" mode="attr">
    <xsl:text>"</xsl:text>
    <xsl:value-of select="name()"/>" : "<xsl:value-of select="."/>
    <xsl:text>"</xsl:text>
    <xsl:if test="position() &lt; last()">,</xsl:if>
</xsl:template>
<xsl:template match="node/@TEXT | text()" name="removeBreaks">
    <xsl:param name="pText" select="normalize-space(.)"/>
    <xsl:choose>
        <xsl:when test="not(contains($pText, '&#xa;'))">
            <xsl:copy-of select="$pText"/>
        </xsl:when>
        <xsl:otherwise>
            <xsl:value-of select="concat(substring-before($pText, '&#xd;&#xa;'), ' ')"/>
            <xsl:call-template name="removeBreaks">
                <xsl:with-param name="pText" select="substring-after($pText, '&#xd;&#xa;')"/>
            </xsl:call-template>
        </xsl:otherwise>
    </xsl:choose>
</xsl:template>
</xsl:stylesheet>

It produces below result:

[{"BillingAddress1" : "717 N. ATLANTIC AVE", "BillingCity" : "DAYTONA BEACH", "BillingCountry" : "US", "BillingCustomerCode" : "3001518", "BillingCustomerName" : "MAUI NIX - DAYTONA BEACH", "BillingState" : "FL", "BillingTelephone" : "32118", "DivisionCode" : "09", "FreightAmount" : "86.52", "InvoiceAmount" : "1041.96", "InvoiceCreatedDate" : "2016-06-18", "InvoiceItems" : [{"ColorCode" : "BLK", "GenderCode" : "M", "InvoiceItemSizes" : [{"InvoiceLineNumber" : "1000", "InvoiceNumber" : "1011063022016", "InvoicedQuantity" : "12", "SizeCode" : "1SZ", "SizeInvoicedPrice" : "24.52", "UPC" : "BBPKC1"}], "InvoiceLineNumber" : "1000", "InvoiceNumber" : "1011063022016", "InvoicedQuantity" : "12", "ProductInvoicedPrice" : "294.24", "ProductName" : "OVERTIME RIPSTOP HTR", "ProductNumber" : "BBPKC1BLK1SZ", "SeasonCode" : "USF16"}, {"ColorCode" : "BLU", "GenderCode" : "M", "InvoiceItemSizes" : [{"InvoiceLineNumber" : "2000", "InvoiceNumber" : "1011063022016", "InvoicedQuantity" : "12", "SizeCode" : "1SZ", "SizeInvoicedPrice" : "20.02", "UPC" : "BBPKL2"}], "InvoiceLineNumber" : "2000", "InvoiceNumber" : "1011063022016", "InvoicedQuantity" : "12", "ProductInvoicedPrice" : "240.24", "ProductName" : "CORE MEDINA", "ProductNumber" : "BBPKL2BLU1SZ", "SeasonCode" : "USF16"}, {"ColorCode" : "BRN", "GenderCode" : "M", "InvoiceItemSizes" : [{"InvoiceLineNumber" : "3000", "InvoiceNumber" : "1011063022016", "InvoicedQuantity" : "24", "SizeCode" : "1SZ", "SizeInvoicedPrice" : "8.77", "UPC" : "BWUFX3"}], "InvoiceLineNumber" : "3000", "InvoiceNumber" : "1011063022016", "InvoicedQuantity" : "24", "ProductInvoicedPrice" : "210.48", "ProductName" : "RIPPER BLOCK ALL DAY ZF", "ProductNumber" : "BWUFX3BRN1SZ", "SeasonCode" : "USF16"}, {"ColorCode" : "BLK", "GenderCode" : "M", "InvoiceItemSizes" : [{"InvoiceLineNumber" : "4000", "InvoiceNumber" : "1011063022016", "InvoicedQuantity" : "24", "SizeCode" : "1SZ", "SizeInvoicedPrice" : "8.77", "UPC" : "BWUFX3"}], "InvoiceLineNumber" : "4000", "InvoiceNumber" : "1011063022016", "InvoicedQuantity" : "24", "ProductInvoicedPrice" : "210.48", "ProductName" : "RIPPER BLOCK ALL DAY ZF", "ProductNumber" : "BWUFX3BLK1SZ", "SeasonCode" : "USF16"}], "InvoiceNumber" : "1011063022016", "InvoiceSentDate" : "2016-06-18", "InvoiceStatus" : "95", "InvoiceTotalQuantity" : "72.000000", "OrderNumber" : "0011353030", "PurchaseOrder" : "099THRCBAG160615", "SalesPersonCode" : "3310", "SeasonCode" : "USF16", "ShippingAddress1" : "717 N. ATLANTIC AVE", "ShippingCity" : "DAYTONA BEACH", "ShippingCountry" : "US", "ShippingCustomerCode" : "3001518", "ShippingCustomerName" : "MAUI NIX - DAYTONA BEACH", "ShippingMethodCode" : "006", "ShippingState" : "FL", "ShippingTelephone" : "32118", "TermsCode" : "DDP", "TrackingNumber" : "0"}]