[Samsung Galaxy J7 NXT ( J701F Core NXT Exynos 7870] PantsDownJedi:
This works fine on my phone. If it doesn't work on yours, standard disclaimer applies about bricking, phone exploding, etc... that's all on you.

The problem has been that regardless of patches and regardless of methods to make the stock 8.1 data partition readable from TWRP, my phone won't do it. So as follows is how I've backup up and restored as an alternative. I don't know if this works well on Windows (Probably not) or MacOS (More likely it will), so its only tested on Linux.

Install adb on the computer

On the running phone, enable usb debugging.

Connect to the phone, allow the computer to access it.

Get a shell

adb shell

Enter as follows to find the block device where data is mounted

mount | grep /data | grep block

My output was this

/dev/block/mmcblk0p24 on /data type ext4 (rw,seclabel,nosuid,nodev,noatime,discard,journal_checksum,journal_async_commit,noauto_da_alloc,errors=panic,data=ordered

The first part, "/dev/block/mmcblk0p24" is what I was interested in. You can see it's mounted at /data

You're in fact looking for this specifically at the beginning "/dev/block/mmcblk0p24 on /data"

If you're confused or you have multiple mount-points or what not, or you don't understand, Stop Now, you're about to screw things up.

Copy the first part of what you have here, in my case "/dev/block/mmcblk0p24" (don't use quotes though)

Reboot into TWRP.

Make sure /data is not mounted in the TWRP menu. If it is, then no need to do this as you can back it up directly from TWRP anyway, and you don't nee this.

Backup will make an image of the entire partition, so it will be big. As follows to backup, change the /dev/block/xxxxxxx to what yours is, if it is differant. Replace xxxxxxx with what your output was, mine was mmcblk0p24 (this needs to be input correctly for backup and restore, this here is where you can screw your phone up)

adb shell 'dd if=/dev/block/xxxxxxx' > DataBackupName.img

(Above, you DO use the single quotes)

DataBackupName.img can be named whatever you want to call it.

This takes a long time, my phone writes 12 gigs or so.

The above command should exit telling you how much data was written. You don't want to have an incomplete backup because the usb cable wasn't great or the process spit the dummy for some reason.

To restore, cross your fingers (works fine on my PC)

Also from TWRP and also making sure data is not mounted:

adb push DataBackupName.img /dev/block/xxxxxxx

You need to have the correct text to replace the xxxxxx. Screwing this up is very high risk of bricking your phone.

Okay all that said, my assumption is that the initial dump won't work on Windows as it needs to direct the output to a file and I have a hunch that the syntax above for directing the output might be done differently. If someone knows how to do the backup on Windows, or can clarify if it works or not as is (after testing) I imagine that would be helpful for Windows users. Feedback in general is good for others, solutions to problems are great.

Additionally, when I was looking for this solution, the answers were a bit old and had to be mildly adapted, but there was a complaint back then that adb couldn't handle the restore. That hasn't been the case for me. A more recent adb binary might fix this if you happen to have this sort of problem.

A benefit of this method, is that if your system can mount an ext4 volume, you can also mount the image, so if you only want one file from a previous backup, or you want to remove a file from the image, or add one, that's all possible... with Linux (Linux geeks know who they are). Note that the image also contains the contents of what gets mounted at /storage/emulated/0

You can compress the image file when its done to reduce the size.