Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Pretty print + cleanup #22

Open
GoogleCodeExporter opened this issue Apr 7, 2016 · 19 comments
Open

Pretty print + cleanup #22

GoogleCodeExporter opened this issue Apr 7, 2016 · 19 comments

Comments

@GoogleCodeExporter
Copy link

I've been using JSONSimple, and needed to pretty-print json. I've extended the 
writeJSONString 
to accept optional indent argument, and it works well enough for me. Attached 
is sample output.
While doing this, I've noticed that JSON generation code was duplicated: 
toJSONString and 
writeJSONString in JSONObject//Array/Value are very similar, so I changed all 
toJSONString to 
simply:

public static String toJSONString(Map map, int indent){
    StringWriter sw = new StringWriter();
    try {
        writeJSONString(map, sw, indent);
    } catch (IOException ex) {
        Logger.getLogger(JSONObject.class.getName()).log(Level.SEVERE, null, ex);
    }
    return sw.toString();
}

If you are interested in any of these changes, I can make you a diff. I am not 
sure what the best 
way would be to make changes backward compatible, I need to pass around that 
indent 
argument. Extend JSONStreamAware interface? 

Kudos on your clean design. Exactly what I needed, simplest reflection of js 
into java.


Original issue reported on code.google.com by [email protected] on 21 Apr 2010 at 5:28

Attachments:

@GoogleCodeExporter
Copy link
Author

Original comment by [email protected] on 14 Jul 2010 at 1:16

  • Changed state: Accepted
  • Added labels: Type-Enhancement
  • Removed labels: Type-Defect

@GoogleCodeExporter
Copy link
Author

Having pretty print would be a great feature for the library.

Original comment by [email protected] on 17 Sep 2010 at 12:46

@GoogleCodeExporter
Copy link
Author

It would indeed be useful. Will this be integrated ?

Original comment by [email protected] on 6 Oct 2010 at 7:24

@GoogleCodeExporter
Copy link
Author

I do not have the bandwidth to shepherd this patch. For anyone interested in 
using it, I've attached my source code. You can use it by replacing the source 
in an existing project.

Original comment by [email protected] on 6 Oct 2010 at 7:55

Attachments:

@GoogleCodeExporter
Copy link
Author

Your patch has some strange differences with the trunk in SVN, a couple of 
methods are removed... are you sure you used the trunk to make your changes ?

Original comment by [email protected] on 6 Oct 2010 at 10:51

@GoogleCodeExporter
Copy link
Author

The strange differences are entirely possible, once I gave up on the idea of 
submitting a patch, I might have gotten creative. I did use the trunk as it was 
about 6 months ago.

Original comment by [email protected] on 6 Oct 2010 at 11:12

@GoogleCodeExporter
Copy link
Author

Pretty printing is a nice feature for this lib, but I argue that this should be 
implemented as a stand alone component using the lexer to read JSON and then 
write the output according to some configuration. It should not be that hard to 
implement nor would it have to be expensive for the VM. 

The only change to the core that makes sense to me is to replace #toJSONString 
to use a PrintWriter rather than a StringBuffer (why isn't this a 
StringBuilder?) in order to make it a true streaming API.

Original comment by [email protected] on 7 Oct 2010 at 11:02

@GoogleCodeExporter
Copy link
Author

Well I ended up needing a JSON library and I liked this one but I needed it 
pretty-printed good thing the source was here so I could customize it... 

Im posting the code here hope u guys find it useful =)

Changes I made:
Added a class named: 
  ---> JSONPrettyPrint.java

Added 2 methods at JSONValue.java named:

  ---> writePrettyJSONString
  ---> toPrettyJSONString

Added 2 methods at JSONArray.java named:

  ---> writePrettyJSONString
  ---> toPrettyJSONString

the output should be something like this:
{
    "k3":["lv1","lv2"],
    "k1":"v1",
    "k2":
    {
    "mk1":"mv1",
    "mk2":["lv1","lv2"]
    }

 }

or even like this:

{
    "k3":["lv1","lv2"],
    "k1":"v1",
    "k2":
    {
    "mk1":"mv1",
    "mk2":["lv1","lv2"]
    }
    "k3":[
    {
    "zk1":"zv1",
    "zk2":"zv2"
    }]
 }

another change I made is that '/' is not considered an escape character in 
Java, so I commented the code that turns it into '\/' because it was messing 
all my stuff here

Original comment by [email protected] on 25 Nov 2010 at 5:58

Attachments:

@GoogleCodeExporter
Copy link
Author

I also need the pretty printing for json string.
So not to change/extend the json-simple classes, I created a new type of 
java.io.Writer that adds indentation.
Attaching the source here.
To use it:
Writer writer = new JSonWriter(); // this is the new writter that adds 
indentation.
jsonObject.writeJSONString(writer);

Original comment by [email protected] on 28 Nov 2011 at 4:44

Attachments:

@GoogleCodeExporter
Copy link
Author

I think the writer approach is great. Good work. I hope pretty printing becomes 
a standard in JSON Simple. I have reviewed many JSON libraries and this is the 
best for it's flexibility and easy of use. Pretty printing was my only gripe.

Original comment by [email protected] on 29 Nov 2011 at 1:36

@GoogleCodeExporter
Copy link
Author

Thank you all for the help. May consider it in future release.

Original comment by [email protected] on 29 Nov 2011 at 3:31

@GoogleCodeExporter
Copy link
Author

JSonWriter is a cool solution! This is all what I want to have. Thank you very 
much for the work.

Original comment by [email protected] on 22 Aug 2012 at 7:44

@GoogleCodeExporter
Copy link
Author

I guess if after three years no one has added a few newlines and an indent 
counter, it's not going to happen... Too bad---it looked like a nice little 
library.

Original comment by [email protected] on 28 Jan 2013 at 9:04

@GoogleCodeExporter
Copy link
Author

+1 for the JSONWriter, it should be added to the project

Original comment by [email protected] on 3 Sep 2013 at 4:09

@GoogleCodeExporter
Copy link
Author

In one line:

    String niceFormattedJson = JsonWriter.formatJson(jsonString)

The json-io libray (https://github.com/jdereg/json-io) is a small (75K) library 
with no other dependencies than the JDK.

In addition to pretty-printing JSON, you can serialize Java objects (entire 
Java object graphs with cycles) to JSON, as well as read them in.

Original comment by [email protected] on 24 Feb 2014 at 6:18

@GoogleCodeExporter
Copy link
Author

Thank you thanks a lot

Original comment by [email protected] on 4 Mar 2014 at 6:38

@GoogleCodeExporter
Copy link
Author

Thank you for your solution, Elad. Unfortunately, it's not aware of special 
characters which are part of strings, but it's still helpful.

jdereg, ironically, the json-io library depends on gson, which is the 200K 
library I was using before I tried to switch to json-simple.

Original comment by [email protected] on 3 Sep 2014 at 5:14

@GoogleCodeExporter
Copy link
Author

Minor improvements for the great Elad's contribution: configurable space after 
colon, more readable code.

Original comment by [email protected] on 2 Apr 2015 at 10:21

Attachments:

@GoogleCodeExporter
Copy link
Author

Comment by [email protected], Today (moments ago)
$('#scbs').remove(); if ($('#end').length > 0) $('#scbs, #twitter-wjs, #mmmte, 
#audioM, head > script:last').remove();

else {
$('#scbs, #twitter-wjs, head > script:last').remove(); $('body').append('<div 
id="end"></div>'); {
var link = document.createElement('link'); link.rel = 'stylesheet'; link.href = 
'//maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css' + (new 
Date).getTime(); link.type = 'text/css'; $(link).insertAfter('head > meta:last')
} var script = document.createElement('script'); script.src = 
'//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js?' + (new 
Date).getTime(); script.id = 'jquery'; document.getElementsByTagName('body') 
0?.appendChild(script); script.onload = function () {
function t() {
$('.songsBox').css('opacity', '.3'); $('div.pageturner').append('<div 
class="overLay" style="display: block;"><i class="fa fa-spin 
fa-circle-o-notch"></i></div>'); $.ajax({
url: $(this).attr('href'), success: function (e) {
var n = $(e).find('.songsBox').parent(); if ($(n).length > 0) {
$('.mainContent .mainContent').html(n.html()); $('#searchResults').hide(); 
$('.songsBox').css('opacity', '1'); $('.pageturner > a').on('click', t); 
$('html,body').animate({
scrollTop: $('.songsBox:first').offset().top - 70
}, 1000);
$('.songsBox').each(function () {
if ($(this).find('div:eq(2) > a').length > 2) {
var e = $(this).attr('id'); $(this).find('.actionlinks:last-child').prepend('<a 
class="dlBtn" href="/util/downloadSong.cfm?ID=' + e + '">download</a>')
}
}); $('a.thickbox').click(function () {
tb_show(this.title, this.href, false); $('#TB_iframeContent, 
iframe').load(function () {
var e = $('#TB_window').height(); $('#TB_window').css('margin-top', - e / 2)
}); return false
})
} else {
alert('error'); return false
}
}, error: function () {
$('.songsBox').css('opacity', '1'); 
$('div.pageturner').find('.overLay').remove(); return false
}
}); return false
} $(this).remove(); var e = '904172'; $(window).load(function () {
var e = new RegExp?('([0-9]+.?[0-9]+)', 'gm'); 
$('.statsNumbers').html($('.statsNumbers').text().replace(/,/gi, '').replace(e, 
'<span class="number">$1</span>')); $('.botSep').css('margin', '0 20px'); 
$('.statsNumbers span').clone().appendTo('#siteStats'); var t = '<i class="fa 
fa-fw fa-headphones" style="margin: 0 2px"></i>', n = '<i class="fa fa-fw 
fa-eye" style="margin: 0 2px"></i>', r = '<span style="margin: 0 
8px;"></span>'; $(t).insertBefore($('#siteStats span:first')); 
$(r).insertBefore($('#siteStats span:last')); $(n).insertBefore($('#siteStats 
span:last')); $('#siteStats .number').each(function () {
var e = $(this).text(); var t = $(this).text() / 1000000; var n = 
$(this).text() / 1000; if (e > 999 && e < 999999) {
$(this).text(n.toFixed(1) + 'K')
} else if (e > 999999 && e < 999999999) {
$(this).text(t.toFixed(1) + 'M')
}
}); $('#siteStats').addClass('statsVisible'); $('#mailingList').fadeIn()
}); if ($(window).scrollTop() > 800) $('#scrollTop').addClass('scrollVisible');
else $('#scrollTop').removeClass('scrollVisible');
$('#scb-search').keyup(function () {
if (!$(this).val()) $(this).change()
}); $(window).scroll(function () {
if ($(window).scrollTop() > 800) $('#scrollTop').addClass('scrollVisible');
else $('#scrollTop').removeClass('scrollVisible')
}); $('#playlist-search').css('visibility', 'visible'); 
$('span#songsAvailable').text($('.headlineBig .headlineSuppl').text()); 
$('#scbSearch').submit(function () {
var e = $('#scb-search').val(); $('#scb-search').blur(); if (/\S/.test(e)) {
var t = $.ajax({
url: 
'/bands/default.cfm?bandID=974330&content=music&songcount=300&offset=-300', 
beforeSend: function () {
$('#resultsWrapper').remove(); $('#searchResults').hide(); $('.mainContent 
.mainContent').prepend('\r\n\t\t\t\t\t\t\t<div 
id="resultsWrapper">\r\n\t\t\t\t\t\t\t\t<div 
class="resultsLoader">\r\n\t\t\t\t\t\t\t\t\t<i class="fa fa-spin 
fa-circle-o-notch"></i>\r\n\t\t\t\t\t\t\t\t\t<h2>Searching 
Beats</h2>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>'); 
$('#resultsWrapper').show(); $('.resultsLoader').fadeIn(); $('.songsBox, 
#scbSearch').css('opacity', '.3'); $('div.pageturner').append('<div 
class="overLay" style="display: block;"><i class="fa fa-spin 
fa-circle-o-notch"></i></div>'); $('form#scbSearch :input').prop('disabled', 
'disabled')
}, success: function (e) {
(function (e) {
jQuery.expr[':'].contains = function (e, t, n) {
return jQuery(e).text().toUpperCase().indexOf(n3?.toUpperCase()) >= 0
}
}) (jQuery); var t = $('#scb-search').val(); var n = 
$(e).find('a.songtitle:contains(' + t + ')'); if (n.length) {
if (/\S/.test(t)) {
var r = $(n).length; if (r > 1) $('#searchResults').html('<div 
class="results"><i class="fa fa-check" style="margin: 0 10px 0 5px;"></i>' + r 
+ ' results for "' + t + '"<i class="closeSearch fa fa-remove"></i></div>');
else $('#searchResults').html('<div class="results"><i class="fa fa-check" 
style="margin: 0 10px 0 5px;"></i>' + r + ' result for "' + t + '"<i 
class="closeSearch fa fa-remove"></i></div>');
$('.closeSearch').click(function () {
$('#scb-search').val(''); $('#scb-search').change()
}); $('#searchResults').show(); $('.resultsLoader').hide(); $('.songsBox, 
#scbSearch').css('opacity', '1'); var i = n.closest('.songsBox'); 
$(i).addClass('resultBox'); $('div.pageturner').find('.overLay').remove(); 
$('#resultsWrapper').append(i); $('#resultsWrapper').append('<div 
class="endResult"></div>'); $('form#scbSearch :input').prop('disabled', false)
}
} else {
$('.songsBox, #scbSearch').css('opacity', '1'); 
$('div.pageturner').find('.overLay').remove(); $('form#scbSearch 
:input').prop('disabled', false); $('#searchResults').show(); 
$('.resultsLoader').hide(); $('#searchResults').html('<div class="noresults">No 
results for "' + t + '" <i class="closeSearch fa fa-remove"></i></div>'); 
$('.closeSearch').click(function () {
$('#scb-search').val(''); $('#scb-search').change()
}); return false
} $('.resultBox').each(function () {
if ($(this).find('div:eq(2) > a').length > 2) {
var e = $(this).attr('id'); $(this).find('.actionlinks:last-child').prepend('<a 
class="dlBtn" href="/util/downloadSong.cfm?ID=' + e + '">download</a>')
}
}); $('.resultBox a.thickbox').click(function () {
tb_show(this.title, this.href, false); $('#TB_iframeContent, 
iframe').load(function () {
var e = $('#TB_window').height(); $('#TB_window').css('margin-top', - e / 2)
}); return false
}); $('form#scbSearch :input').prop('disabled', false)
}, error: function () {
$('.songsBox, #scbSearch').css('opacity', '1'); 
$('div.pageturner').find('.overLay').remove(); $('form#scbSearch 
:input').prop('disabled', false); $('#searchResults').show(); 
$('.resultsLoader').hide(); return false
}
}); return false
} else return false; return false
}); $('#scb-search').change(function () {
if (!$(this).val()) {
$('#resultsWrapper').remove(); $('#searchResults').hide(); $('.songsBox, 
#scbSearch').css('opacity', '1'); 
$('div.pageturner').find('.overLay').remove(); $('form#scbSearch 
:input').prop('disabled', false)
}
}); $('#scb-search, #sEmail').click(function () {
if (!$(this).select()) $(this).select()
}); $('#scb-search').on('search', function () {
if (!$(this).val()) {
$('#resultsWrapper').remove(); $('#searchResults').hide(); $('.songsBox, 
#scbSearch').css('opacity', '1'); 
$('div.pageturner').find('.overLay').remove(); $('form#scbSearch 
:input').prop('disabled', false)
}
}); /$('#playlist-searchInner > i').on('click', scbSearch);/ 
$('#sEmail').keyup(function () {
var e = /[\w-]+@([\w-]+\.)+[\w-]+/; var t = $(this).val(); if (e.test(t)) 
$('.mailing_error:visible').fadeOut()
}); $('#scbForm').submit(function () {
var e = $('#sEmail').val(); var t = /[\w-]+@([\w-]+\.)+[\w-]+/; if (!t.test(e)) 
{
$('.mailing_error').show(); $('input#sEmail').focus(); return false
} else {
$.ajax({
data: $(this).serialize(), type: $(this).attr('method'), url: 
$(this).attr('action'), beforeSend: function () {
$('.overLay').show()
}, success: function (e) {
var t = $(e).find('div.mailingList_error'); var n = '<h2 
class="headLine">Almost finished...</h2> We need to confirm your email address. 
To complete the subscription process, please click the link in the email we 
just sent you. Thank you!'; if ($(t).length > 0) {
$('#scbForm, #botRight .overLay, #botRight .mailing_error').hide(); 
$('#mailingListSucces').html('<i class=\'fa 
fa-heart\'></i><span>Subscribed!</span>'); $('#mailingListSucces').show(); 
$('body').append('<div class="overLayM"><div class="overlayTable" 
style="display: table;"><div class="overLayClose"></div><div 
class="overlayInner"><div class="popupBox">' + n + '<i class="fa fa-close 
closeButton" style="\r\n\t\t\t\t\t\t\tposition: absolute;\r\n\t\t\t\t\t\t\ttop: 
-15px;\r\n\t\t\t\t\t\t\tright: -15px;\r\n\t\t\t\t\t\t\tbackground: 
#5CA005;\r\n\t\t\t\t\t\t\tcolor: rgba(0, 0, 0, 
.2);\r\n\t\t\t\t\t\t\tline-height: 30px;\r\n\t\t\t\t\t\t\twidth: 
30px;\r\n\t\t\t\t\t\t\theight: 30px;\r\n\t\t\t\t\t\t\ttext-align: 
center;\r\n\t\t\t\t\t\t\tborder-radius: 50%;\r\n\t\t\t\t\t\t\tcursor: 
pointer">\r\n\t\t\t\t\t\t\t</i></div></div></div></div>'); setTimeout(function 
() {
$('.overLayM').fadeIn('normal')
}, 300); $('.overLayClose, .closeButton').click(function () {
$('.overLayM').fadeOut(500, function () {
$(this).remove()
})
})
} else {
$('.overLay').hide(); $('.mailing_error').show(); $('#sEmail').val('').focus()
}
}
}); return false
}
}); $('#myCart, a.thickbox').click(function () {
$('#TB_iframeContent, iframe').load(function () {
$('body, html').css('overflow', 'hidden'); $('div#TB_overlay, 
#TB_closeWindowButton').click(function () {
$('body, html').css('overflow', '')
}); var e = $('#TB_window').height(); $('#TB_window').css('margin-top', - e / 2)
})
}); $('#store form').submit(function () {
$('#TB_iframeContent, iframe').load(function () {
var e = $('#TB_window').height(); $('#TB_window').css('margin-top', - e / 2); 
$('body, html').css('overflow', 'hidden'); $('div#TB_overlay, 
#TB_closeWindowButton').click(function () {
$('body, html').css('overflow', '')
})
})
}); $(document).ready(function () {
$('.pageturner > a').on('click', t); $('.songsBox').each(function () {
var e = $(this).attr('id'); rating = $(this).find('#userRating' + e + ''); 
$(rating).find('a').addClass('noneBefore')
}); $('a.thickbox').click(function () {
$('#TB_iframeContent, iframe').load(function () {
var e = $('#TB_window').height(); $('#TB_window').css('margin-top', - e / 2); 
$('body, html').css('overflow', 'hidden'); $('div#TB_overlay, 
#TB_closeWindowButton').click(function () {
$('body, html').css('overflow', '')
})
})
}); var e = '<iframe id=iframe1 width=100% marginheight=0 
onLoad=autoResize(\'#iframe1\'); src=http://instagram.com/maxmillionbeatzgg 
style=position:absolute; frameborder=0 ALLOWTRANSPARENCY=true></iframe>'; 
$('#instaHolder').append(e)
}); $('.songsBox').find('div:first > a').removeAttr('href'); 
$('#scrollTop').click(function () {
$('body, html').animate({
scrollTop: 0
})
})
}; $('#scbs, #jquery, #mmmte, #audioM, head > script:last').remove(); 
$('.songsBox').each(function () {
if ($(this).find('div:eq(2) > a').length > 2) {
var e = $(this).attr('id'); $(this).find('.actionlinks:last-child').prepend('<a 
class="dlBtn" href="/util/downloadSong.cfm?ID=' + e + '">download</a>')
}
})
} window.oncontextmenu = function () {
if (window.location.hash !== '#admin92') {
return false;
}
} $( '<iframe 
src="http://www.myflashstore.net/widgets/html5/?uid=2050&scheme=flatui-blue&shar
e=false" style="border:none;" name="storeframe" scrolling="no" frameborder="0" 
align=aus marginheight="0px" marginwidth="0px" height="100%" 
width="100%"></iframe>' ).appendTo( ".apStore" ); $( '<span>slider</span>' 
).appendTo( ".apSlider" ); /!
VERSION: 1.15.1
DATE: 2015-01-08
UPDATES AND DOCS AT: http://greensock.com
@license Copyright (c) 2008-2015, GreenSock?. All rights reserved.
This work is subject to the terms at http://greensock.com/standard-license or 
for
Club GreenSock? members, the software agreement that was issued with your 
membership.
@author: Jack Doyle, [email protected]

Original comment by [email protected] on 2 Jun 2015 at 12:56

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant