How to explicitly set carriage return when doing json.dump?
If you insist on consistent CRLF behavior (the JSON spec requires parsers to handle both, but opening it in certain plain text readers like Notepad might be easier with consistent CRLF), the solution is in the open
function, not the json
module.
Just pass newline='\r\n'
to open
, and it will translate any \n
written by json
to \r\n
seamlessly on all systems, rather than the default behavior of translating to os.linesep
(which is \r\n
on Windows and \n
on most other OSes):
with open(fpath, 'w', encoding="utf-8", newline='\r\n') as outfile:
json.dump(data, outfile, indent=4, sort_keys=True, ensure_ascii=False)
Removing a new line feed in json file using Python.
Reading between the lines, I think the input format might be a single JSON array, and the desired output is newline-separated JSON representations of the elements of that array. If so, this is probably all that's needed:
with open('testnoline.json', 'w') as outfile:
for obj in data_json:
outfile.write(json.dumps(obj) + "\n")
Python: Handling newlines in json.load() vs json.loads()
json.load()
reads from a file descriptor and json.loads()
reads from a string.
Within your file, the \n
is properly encoded as a newline character and does not appear in the string as two characters, but as the correct blank character you know.
But within a string, if you don't double escape the \\n
then the loader thinks it is a control character. But newline is not a control sequence for JSON (newline is in fact a character like any other).
By doubling the backslash you actually get a real string with \n
in it, and only then will Python transform the \n
into a newline char.
How to add a newline function to JSON using Python
If you wish to write your data exactly as you have read it in, then you will need to iterate over each dictionary in dicts
:
with open('firetobq_peripheral5.json', 'w') as out_file:
for d in dicts:
out_file.write(json.dumps(d))
out_file.write("\n")
If this is not required, then json.dump
would be the best option.
Python3 remove newline character from json response
You try to call .replace
on a dictionary. You should call .replace
on the string:
content = json.loads(r.decode('utf-8').replace('\n', ''))
However, keep in mind that this may invalidate the string as json, depending on its content.
BTW, if you use requests
you can get json
directly:
import requests
content = requests.get("http://example.com/file.json").json()
How to end a JSON file with "\r\n"?
\r
is a means of expressing the carriage return character -- a control signal which sends the cursor back to the beginning of the line. \n
is a linefeed -- a signal which sends the cursor down to the next line.
On DOS and Windows, \r\n
(aka CRLF) is the traditional way to end a line of text. Presumably, then, this means that your software is expected to write a JSON document on one line, followed by a DOS/Windows-style newline.
socket.write(json.dumps({'test': 'EXAMPLE'}, sort_keys=True) + '\r\n')
Note that indent=4
is not specified here, because setting any value other than None
for indent
means that you want your data split onto multiple (indented) lines -- whereas if your format ends in \r\n
, that implies that the data is all expected to be on a single line.
Python write valid json with newlines to file
You ran into the pitfall of neglecting the fact that the \
character is also an escape sequence character in Python. Try printing out the last example instead of calling json.loads
:
>>> print('{"mystring": "Line 1\nLine 2"}')
{"mystring": "Line 1
Line 2"}
No way the above is valid JSON. What if the \
character is correctly encoded?
>>> print('{"mystring": "Line 1\\nLine 2"}')
{"mystring": "Line 1\nLine 2"}
Much better, you can then:
>>> json.loads('{"mystring": "Line 1\\nLine 2"}')
{'mystring': 'Line 1\nLine 2'}
Alternatively, if you really appreciate being able to copy some text from some other buffer and paste it into your live interpreter to do decode, you may consider using the r
aw modifier for your string:
>>> print(r'{"mystring": "Line 1\nLine 2"}')
{"mystring": "Line 1\nLine 2"}
>>> json.loads(r'{"mystring": "Line 1\nLine 2"}')
{'mystring': 'Line 1\nLine 2'}
See that the \
is no longer automatically escaping with the newline.
Also see: How do I handle newlines in JSON? and note how this is not a problem that exists strictly within Python.
Related Topics
How to Make a Tkinter Label Background Transparent
How to Remove Parentheses from a String
How to Limit a Number to Be Within a Specified Range (Python)
Finding Out Who Got the Highest Mark Among the Students
Converting a List into Comma Separated and Add Quotes in Python
How to Remove/Delete a Virtualenv
Making a Matrix in Python 3 Without Numpy Using Inputs
How to Find 3 Immediate Words After Keyword Match Using Python
Numpy Array Typeerror: Only Integer Scalar Arrays Can Be Converted to a Scalar Index
Using a Pandas Dataframe as a Lookup Table
How to Drop Rows from Pandas Data Frame That Contains a Particular String in a Particular Column
Taking Data from Drop-Down Menu Using Flask
Python - Use Previous Row'S Value to Update the New Rows Values
How to Convert Datetime by Removing Nanoseconds
How to Select the Last Column of Dataframe
Json Dump in Python Writing Newline Character and Carriage Returns in File.