diff --git a/README.md b/README.md index 12da41c..e3a4762 100644 --- a/README.md +++ b/README.md @@ -281,18 +281,23 @@ $ cat robots.html | pup 'div#p-namespaces a' $ cat robots.html | pup 'div#p-namespaces a json{}' [ { - "accesskey": "c", - "href": "/wiki/Robots_exclusion_standard", + "attrs": { + "accesskey": "c", + "href": "/wiki/Robots_exclusion_standard", + "title": "View the content page [c]" + }, "tag": "a", - "text": "Article", - "title": "View the content page [c]" + "text": "Article" }, { - "accesskey": "t", - "href": "/wiki/Talk:Robots_exclusion_standard", + "attrs": { + "accesskey": "t", + "href": "/wiki/Talk:Robots_exclusion_standard", + "rel": "discussion", + "title": "Discussion about the content page [t]" + }, "tag": "a", - "text": "Talk", - "title": "Discussion about the content page [t]" + "text": "Talk" } ] ``` @@ -303,18 +308,23 @@ Use the `-i` / `--indent` flag to control the intent level. $ cat robots.html | pup -i 4 'div#p-namespaces a json{}' [ { - "accesskey": "c", - "href": "/wiki/Robots_exclusion_standard", + "attrs": { + "accesskey": "c", + "href": "/wiki/Robots_exclusion_standard", + "title": "View the content page [c]" + }, "tag": "a", - "text": "Article", - "title": "View the content page [c]" + "text": "Article" }, { - "accesskey": "t", - "href": "/wiki/Talk:Robots_exclusion_standard", + "attrs": { + "accesskey": "t", + "href": "/wiki/Talk:Robots_exclusion_standard", + "rel": "discussion", + "title": "Discussion about the content page [t]" + }, "tag": "a", - "text": "Talk", - "title": "Discussion about the content page [t]" + "text": "Talk" } ] ``` diff --git a/display.go b/display.go index 0be946c..ceba8c3 100644 --- a/display.go +++ b/display.go @@ -264,13 +264,15 @@ type JSONDisplayer struct{} func jsonify(node *html.Node) map[string]interface{} { vals := map[string]interface{}{} if len(node.Attr) > 0 { + attrs := map[string]interface{}{} for _, attr := range node.Attr { if pupEscapeHTML { - vals[attr.Key] = html.EscapeString(attr.Val) + attrs[attr.Key] = html.EscapeString(attr.Val) } else { - vals[attr.Key] = attr.Val + attrs[attr.Key] = attr.Val } } + vals["attrs"] = attrs } vals["tag"] = node.DataAtom.String() children := []interface{}{} diff --git a/tests/expected_output.txt b/tests/expected_output.txt index 7f06b47..3b08cee 100644 --- a/tests/expected_output.txt +++ b/tests/expected_output.txt @@ -10,7 +10,7 @@ a92e50c09cd56970625ac3b74efbddb83b2731bb table li 66950e746590d7f4e9cfe3d1adef42cd0addcf1d table li:last-of-type 0a37d612cd4c67a42bd147b1edc5a1128456b017 table a[title="The Practice of Programming"] 0d3918d54f868f13110262ffbb88cbb0b083057d table a[title="The Practice of Programming"] text{} -ecb542a30fc75c71a0c6380692cbbc4266ccbce4 json{} +199188dc8f1522426a628e41d96264bffb8beb0f json{} 95ef88ded9dab22ee3206cca47b9c3a376274bda text{} e4f7358fbb7bb1748a296fa2a7e815fa7de0a08b .after-portlet da39a3ee5e6b4b0d3255bfef95601890afd80709 .after @@ -34,7 +34,7 @@ d314e83b059bb876b0e5ee76aa92d54987961f9a .navbox-list li:nth-last-child(1) 613bf65ac4042b6ee0a7a47f08732fdbe1b5b06b #toc da39a3ee5e6b4b0d3255bfef95601890afd80709 #toc li + a da39a3ee5e6b4b0d3255bfef95601890afd80709 #toc li + a text{} -97d170e1550eee4afc0af065b78cda302a97674c #toc li + a json{} +cd0d4cc32346750408f7d4f5e78ec9a6e5b79a0d #toc li + a json{} da39a3ee5e6b4b0d3255bfef95601890afd80709 #toc li + a + span da39a3ee5e6b4b0d3255bfef95601890afd80709 #toc li + span da39a3ee5e6b4b0d3255bfef95601890afd80709 #toc li > li